谈谈我做嵌入式系统开发的心得

来源:互联网 发布:淘宝电动平衡车 编辑:程序博客网 时间:2024/05/18 02:22

己从事嵌入式系统开发有好多年了,在此想与大家分享我对于嵌入式开发的一点心得与体会。

先大致说一说我的工作经历。97年毕业后做了两年的电气与电子设计与开发,这一时期,我做过电路原理图的设计和PCB板的设计。从99年开始,我进入了软件行业。第一次做嵌入式开发是在2000年,在随后的六年多的时间里,我差不多做过整个操作系统的组件。一开始用的是uC/OS RTOS,熟悉它的人知道,它是一个微内核,提供了任务的调度、Mutex、Semaphore等基本的功能,但是像TCP协议栈、文件系统、堆管理(指malloc/和free)这些功能都没有,当然也包括没有相应的硬件驱动模块,如PCI、串口、I2C、IDE硬盘等。第一次做的这个产品是一个DVR(Digital Video Recorder),CPU用的是AMD的SC520,是一块x86的处理器。因为公司小,所以整个DVR的嵌入式软件就我一个人做,这对于我来说是一个难得的机会和挑战。我所做的包括:

1) 熟悉CPU。x86中存在实模式和保护模式,CPU一上电后进入的是实模式,要进入保护模式则需要做一定的设置,最后做一个长跳转,就能进入保护模式。对于这一处理器的熟悉和了解,使得我对于处理器有一个很好的认识。此外,还得明白什么是芯片组、PCI的原理和配置方法、SDRAM如何配置、IDE的PIO模式是如何工作的,等等。

2) 熟悉uC/OS RTOS并对其进行扩展。理解任务是如何实现的、任务是如何被调度的、Mutex和Semaphore是如何实现的、对处理器进行开关中断的目的是什么且要注意什么,等等。对于RTOS的扩展则包括实现了一个采用malloc/free进行内存分配的堆管理模块,这一管理模块是参照XINU操作系统来实现的;对任务调度部分进行修改以方便中断服务程序的管理。

3) 将MINUX操作系统的文件系统移植到我们的DVR上。MINUX中采用的就是UNIX中的i-node的方式来管理文件的,这种方式在现在的Linux中也能看到。由于MINUX的文件系统是针对小型存储设备的,所以对其代码要进行修改,以适应当时所采用的上G的硬盘。

4) 将XINU中的TCP协议栈移植到DVR上。我记得很清楚的是,当时对于TCP的滑动窗口的调试以及校验和的调试花了不少时间。
可以说这一时期的工作,使得我对于操作系统的原理和实现非常的熟悉。还有,我在这一公司使用过了逻辑分析仪去分析总线信号以解决问题,这些都是非常好的经历,都有助于提升对计算机系统的理解。

2003年我加入了UTStarcom,因为前一个项目的经历,当时进这一公司时觉得自己很牛。但很快我发现,嵌入式系统中还有很多是我要学的,我还嫩呢。比如:

1) 第一个挑战是处理器,当时用的是PowerPC8250。对于处理器,我花了不少时间去读相关的资料。总的加起来,其手册超过两千页,而且还是英文的。为了使得自己更加的熟悉这块处理器,我前前后后对这些资料完整的读了三四遍。

2) 当时采用的是RTEMS操作系统,这一系统就是一个类UNIX的操作系统,早期是美国_军方使用的,后来变成了开源项目。在这一操作系统上的工作经历让我一下子意识到了自己的一个问题,那就是:以前的工作只是技术性的不具备系统性。比如,如何将一个操作系统作为一个系统将其设计得更好、驱动程序如何方便增加以及扩展,等等。这一切说到底是自己的设计能力还是不足。我花了很长的时间来研究RTEMS操作系统的实现,这对于提升自己的设计能力有很大的帮助。

3) 对于编译器和C语言的理解不深。比如什么是ABI(Application Binary Interface)?后来知道Stack Frame和程序的调用栈的管理都与ABI有关系。
在UTStarcom工作的初期,所有与操作系统相关的问题都是由我来解决的。此外,在我的经理的支持下,我还做过了一个更新版本RTEMS操作系统的移植,当时,UTStarcom的RTEMS操作系统的移植是在新泽西完成的,我不知我是不是UTStarcom在中国第一个做这个操作系统移植的。当时,我在做移植时还碰到了一个与编译器相关的问题,还找过WindRiver做支持。因为我们用的是WindRiver的调试器,当时怀疑是调试器有问题,最后发现是RTEMS的Tool Chain有Bug。UTStarcom的中期,我们将我们的应用程序移植到了VxWorks上,所以后来我对于VxWorks也很熟悉。后来还做过了一个ADSL接入的项目,采用的还是VxWorks以及PNE(Platform for Network Equipment),处理器用的是Intel的XScale IXP425。2006年5月我离开了UTStarcom。

应当说,前面两个公司工作经历是我很宝贵的财富。一方面完成了从小公司到大公司的转变,说实在的在进UTStarcom时,还是很有压力的。什么都是新的,新的行业、新的产品,当然对于我来说是直接工作内容的变化,新的处理器、新的操作系统、等。前两个公司有一个工作情景我一直很怀念,那就是:我是一手拿示波器,一手拿电路原理图进行软件调试的。

好了说了这么多,现在我想说说我对于嵌入式系统开发的感受和看法。在此,我想先说说什么是嵌入式开发,这一点我看过不少对其的定义。先抛开别人的定义,我想说说我的观点。有不少工程师的工作是写运行在RTOS之上的应用程序的,但他(她)其实根本不用接触硬件相关的知识、不用接触什么是中断、也不用考虑任务的优先级,对于这些工作我不认为是嵌入式开发,其实,说到底只是采用了新的一套API(即RTOS的相关函数)进行编程。嵌入式开发我认为至少要与硬件和RTOS打交道,对一操作系统的原理和实现很清楚。从我的角度来看,如果一个写驱动的人只知道驱动相关的内容,而对于操作系统的机理并不是很清楚,那也不能算是嵌入式系统开发,就是驱动开发。下面是我对于嵌入式系统开发的一些看法。

1) 嵌入式开发对于提升我们的系统知识有很大的帮助,尤其是操作系统的知识。嵌入式系统开发对于我们的知识面要求非常的广,且要有一定的深度。在做嵌入式开发之前,我是做Visual C++开发的,当我做过嵌入式开发后,我就能明白在Windows桌面上双击鼠标时,后台有什么事情发生了。比如,我能想到后面有一个Loader将文件加载到内存,并最终运行程序。虽然,没有做过嵌入式开发也能想到这一点,但能看到的深度是不同的。

2) 当我们对于操作系统的原理和实现非常熟悉后,嵌入式系统开发的工作相对简单。因为,操作系统的概念已经很成熟了,而现在的嵌入式系统就是将现代操作系统的技术运用到嵌入式系统。这里说的简单,主要是强调其需求相对的稳定、功能相对的单一。软件设计真正复杂是做应用,应用开发是我们真正能发挥设计能力的地方。

3) 嵌入式系统开发经验对于提升我们解决问题的能力有及大的帮助。因为我们系统性的知道了软件是如何被组织在CPU上运行的,这对于我们分析和解决问题很有意义,对于自己解决复杂问题的信心也很有帮助。

4) 具备一定的硬件知识对于嵌入式开发大有裨益。比如,我们要明白什么是片选,什么是3态,什么是I/O,如何看时序图等等。最好还得会使用相关仪器,比如示波器、逻辑分析仪。

最后,我想说的是嵌入式系统开发一旦我们达到了一定的水平后,其实很简单,就是如何去看CPU和相关芯片的Datasheet!

讲的太透彻了,忍不住转了过来  http://bbs.ishixi.com/showtopic-9016.html#smiliyanchor

学习有好方法,但没有速成、没有灵丹妙药,不爱好这行很难学习好。
看那些培训机构鼓吹,学linux驱动就是高级了,移植wince就如何如何了。这些乱糟糟的信息把初学者鼓动的很是浮躁,越来越多的不学无术,越来越多的口水仗,真的让人很崩溃。

还是从底层开始,51+汇编一步步学起,要知道计算机发展这么多年,始终跳不出那个框框,没有结构性的变化,而嵌入式处理器结构一直是慢半拍。

真正像作者说的,搞懂了什么是片选,什么是3态,什么是I/O再去理解软件。看看一个小系统内部组件是如何实现的再去看大中型系统,用起来才更游刃有余。

不过他有一点没有讲,不要瞧不起写应用程序的。写一个优秀的应用程序要比写个串口驱动复杂多了。
离了应用程序,操作系统、文件系统、网络协议都是狗屎。做移植关注点很小,只是一个部分,按照既定的对上接口写就好了,而且有大量的文档可供参考。
而一个应用程序却是从零开始,系统的构架、扩展性、特殊要求的处理,往往是没有东西可供参考的,这才是创造。


也借此帖勉励自己:少上论坛灌水,少看没营养的水贴,静下心,多花些时间在有用的事情上。
戒骄戒躁、珍惜时间、相信美好!

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 4个月婴儿肺炎怎么办 宝宝吃胡萝卜泥拉肚子怎么办 宝宝吃土豆泥不消化怎么办 五个月宝宝奶睡怎么办 橘子和牛奶一起吃了怎么办 半岁宝宝不喝水怎么办 一岁宝宝总是便秘怎么办 1岁的宝宝不喝水怎么办 两月宝宝不喝水怎么办 破壁机打出的果汁很浓稠怎么办 榨的果汁不甜怎么办 11个月宝宝吃盐怎么办 1岁半宝宝长牙慢怎么办 小孩里面的牙黑怎么办 7个半月宝宝便秘怎么办 2个月婴幼儿便秘怎么办 3个月宝宝不消化怎么办 一天大便二三次不消化怎么办 不消化没胃口几天不大便怎么办? 两个月的宝宝拉绿屎怎么办 肠胃不好消化功能差怎么办 2岁宝宝消化不好怎么办 5天新生儿不拉大便怎么办 七个月宝宝一周不拉屎怎么办 七个月的宝宝消化不良怎么办 七个月宝宝消化不良拉肚子怎么办 宝宝六个月了便秘怎么办 宝宝拉水酸臭味怎么办 50天婴儿不拉屎怎么办 六个月宝宝吃米粉便秘怎么办 纯母乳喂养的宝宝便秘了怎么办 换奶粉拉绿色是怎么办 2个月宝宝发烧怎么办 小宝绿色稀大便怎么办 新生儿吃奶粉大便干燥怎么办 婴儿拉绿色奶瓣怎么办 宝宝吃奶粉大便干燥怎么办 婴儿吃奶粉不大便怎么办 孩子喝奶粉拉大便干怎么办 吃奶粉拉不出来怎么办 一岁半宝宝睡觉抱着睡放不下怎么办