51WinCE-博客园分站

WinCE非官方Blog分站

导航

【原创】工作总结

      这是新工作的第一个月,本来一直想每周写点什么,但是由于实在是发现忙的不行。一到周末除了完成一些既定的任务意外,剩余的时间都分给了睡觉,实在是有点缺乏睡眠了。但总体来说这一个月在M社的工作让自己对嵌入式这个行业有了一个新的认识,以及对做为一个研发人员(说实话,在大陆的真正意义上都不能称作研发,只能说成二次开发或者代码维护人员)的工作方式有了一个全新的理解,下面给大家一起分享一下;

工作:

     在M社(目前只能称之为M社,因为并没有转正,下周虽然可以拿到工牌了但是还要一个月才能转正,转正后可以用全程来说)的工作于以前的工作是没办法比较的,以前在一个很小的design house工作,现在在一个原厂工作,完全是两个天地,以前也接触过一些芯片原厂,现在的体会,协同工作和企业文化的确深深的印象到每个人,虽然很累(TW的公司,JP,KR的公司基本上都是这样。。。),每天基本上晚上10点半才离开公司,但是基本上老大们都陪着一起奋斗到最后,整体虽然还是有些抱怨,但是,对于我看来已经是非常正常。加班其实在某种程度上加快个人的进步,周六虽然轮班,但是还是有很多人一起加班,而且,在加班中的的确确是学到了不少的知识,得到了高人的指点,具体我们放在后面说,另外就是公司Boss于员工沟通是会抓住非常有效的时机来表达自己对公司发展方向以及目标的规划,让员工工作方向和工作的方法都非常明确。

      这个月觉得收货非常大的一点是对整个消费类电子的销售时间模式有了个非常明确的认识。一个产品从开发到销售,我们通常会有说什么淡旺季的说法,在以前的公司只感觉圣诞节是一个旺季点,其他都是研发为主,当然这里是说的海外市场,但是这个观点在某种程度上是太狭窄的看法了。一个产品在很前期,都是一个铺垫,真正的需要是在某一个关键点上,但是这个关键点的把握,往往是需要一个长达一年周期的铺垫,而在这一年周期的铺垫当中产品一般分为两到三个周期。例如,一个产品,在国内销售,按照现在国内的习惯,旺销的时机一般在国庆和春节,而国庆和春节假期如何真正的能把握住这个销售的最好实际,在前期几个月的铺垫则是非常关键,第一期的研发必须从3月份开始做铺垫,4月份进入冲刺阶段,在这个阶段公司一般会做一个冲刺式的开发,在5月1日前作出能够批量生产的机器,同时在市场上进行小规模的推广,从5月份到9月份这几个月是一个试验期,在这几个月中是相对非常痛苦,因为有机器生产和销售,不断会有不同的问题反馈,并伴随这版本的升级和更新,这几个月的将会进入一个封闭式的开发,对当前存在的问题进行修订和升级,所有的一切是为了一个目标,国庆的大批量销售。到国庆,一个稳定而且性能优质的机器将会铺天盖地的进行销售,10月到12月的工作就相对转向生产的补充和辅助,如果有外单的话这两个月也是非常繁忙,国内是为了元旦春节期间的继续大批量销售,国外则是需要保证在11月前完成产品的生产和测试修订,要知道,如果产品去了欧美赶圣诞的档期,也就意味着要在海上飘个1一个多月,11月如果没办法生产测试完成,圣诞档期也就基本无望。

     上面说的这么多,对于高手来说基本上是看乐子,其实都是很基础的道理,我到现在才对这个行业的年计划有了一个大致的了解。对于做消费类电子的人来说,特别是做研发工程的人来说,一年没有空闲,没有淡季,只有旺季;

技术:

      在技术方面,现在离wince越来越远。但是会经常看Jake兄H兄的blog,Jake兄是已经彻底的皈依wince了,还被评上了微软的MVP。先祝贺一下。但是还是那句话,在去M社的前几天,和H兄聊了下,实际上OS是什么,并不重要,重要的是客户体验以及实际的需求,做为一个产品,终端客户并不会去在意你用了啥OS,wince?android?等等。。。。。终端客户所需要的是一个稳定而略显新奇的消费产品,如果有其他的需求就另当别论了。

      在休息的时候听到的一个对话,其实我对这个也存有一些疑问,但是这个对话让我豁然开朗,有个新来的同事一直追问,为啥我们不用所谓主流的OS呢,例如上面说道的W和A或者其他的,一个很资深的工程师说了一句很经典的话,W和A都是别人,特别是A虽然现在免费,说不定哪天就不能用了,我们有我们自己的用的踏实。的确,真正是自己的东西才放心能继续使用,不用管什么版权不用管是否还能继续免费,只要做到稳定和功能完善就可以了。毕竟我们是原厂。当然,W和A也会涉及一些。

      经过一个月的学习,再回过头来看WINCE的整个构架,感觉越发清晰,我们往往还是摆脱不了一个熟悉的微软传统的shell,觉得看到命令行或黑呼呼的一片就没有OS了,其实shell只是OS的一个表征,虽然也是个非常重要的部分,但是,在整个OS的层次中是在最上层,于客户接触的一层,我们往往就觉得OS就到这层,下面的我们都不太去想仔细去考察了,因为,有微软的牛人或者google的高手们帮我们搞定了,现在看看wince的shell下面,实在是非常的雄伟,为了shell能充分响应控制底层的设备和功能,能竟快的体现出当前设备硬件的状态,shell下面有丰富的api接口与硬件驱动相连接,而这些驱动接口也只是一个层次,在这个层我们可以看到有WIN32 API做为代表,到了内核,又有GWES,DEVICE管理,文件系统管理,网络等等,这个层次是做为整个OS的核心,不经要实现基本OS对设备和文件的管理,并且要协同不同的设备之间进行沟通和工作协同,这也就是驱动与驱动之间的接口,这个完成后就是最底层的实际驱动的接口,OAL,流式设备接口和本地驱动的接口,而这些个接口又是受内核层的管理,这些完成后当然就是最底层的bootloader,这里就看实际的芯片构架了,是arm的还是mips,这里又分成一层引导层,当然,这一层有的时候我们就直接会把他于最底层驱动层合并在一起。

     上面啰嗦了那么多,主要就是想说明一个事情,只是拿wince来做例子,大部分的OS流程,都应该是一个层次分明的结构,大概就分为Shell App层,kernel 内核层,driver驱动引导层,而我们可能实际开发到的也许就是只有个driver驱动层,但是还是得去对上面的每个层次进行了解才知道他真正的工作机理。或者,你也可以不用去顾及那么多,因为这样其实更好,并不会由于是什么操作系统而感觉到很难适应,是哪层的就做哪一层的事情,按照规范格式做好就可以了,呵呵虽然不推荐,但是遇到了紧急的开发时可以这样,事后还是去学习下原理会豁然开朗。

     最后就是对最近开发的一些东东说简单的思路,最近主要围绕keypad和遥控杆这些东西进行开发,偶尔碰了下display这块,但是由于display这块有比较固定的格式了所以只是个简单的driver porting的过程,再加上原厂的牛气。。。供应商很快就给了准确的屏资料,实际调试也没用到几天,花了比较大的尽力还是在一个触摸电容按键和easy point上,触摸式电容按键一般用在白家电,LG的巧克力系列据说也用的是那个东东,但是说实话,调试起来不知道是什么原因还是阻力很大,总结了下,其实也可以用到其他的设备上,从电源开始检查,

1.上电供电是否正常,纹波是否正常,电源是否干净,地接法是否干净;
2.是否有复位动作;
3.通讯方式,通讯是否正常,通常抓一下波形;
4.初始化的值以及寄存器,是否读取到正确的设备ID是一个比较重要的验证方法;
5.实际操作检查工作状态,做好于上层的接口,尝试调试实际操作;

      电容式按键一直没有出准确值,可能是由于电压的原因,板子上3.3v的电压,可能导致采样的不准确,但是在这次开发中第一次遇到按键的实际按下和抬起的动作,在这里需要做一些处理。

      对于电容按键,当抬起以后并不会继续发送中断提示主设备去读取,这样也就意味着我们只能判断其按下,并不能判断其抬起,这里和同事讨论出一个办法,就是当按下后做一个Timer,首先出现中断时判断下Timer是否打开,如果打开了就关闭,当处理完成中断工作后,打开Timer,当Timer超时,主设备自主去读一次按键,这时如果是保持按下的就不做动作,如果是抬起了,其按键值会恢复到通常状态,这是就可以做释放动作,这些处理是为了配合AP控制,这个例子也就说明了上下驱动和AP的联系,另外对于easy point就好办的多,easy point有一个dead zone,一旦设备摇杆进入了这个zone,中断就不会出现,一旦不出现中断,我们就认为easy point就返回中心点,就马上做对应上次动作的抬起动作即可,比电容按键来的单纯,按键可能有组合键的概念,同时按下两个,但一般情况下,这两个功能可以用同一个思路来解决,毕竟都是按键。

       以上纯属个人这个月以来所思考和经历的,还有需要继续修订的部分,如果有任何错误请大家指教交流。

posted on 2010-04-06 00:06  MercuryXu  阅读(433)  评论(3编辑  收藏  举报