一位经验丰富的嵌入式工程师分享的必备技能清单 (一位经验丰富的老师用英语怎么说)

我是一位从事嵌入式系统开发多年的老工程师。今天,我想与大家分享我对于嵌入式开发的一些心得体会。首先大致说一说我的工作经历。

工作经历

97年毕业后,我做了两年的电气与电子设计与开发。这一时期,我做过电路原理图的设计和PCB板的设计。从99年开始,我进入了软件行业。2000年开始做嵌入式开发。在随后的六年多的时间里,我差不多做过整个操作系统的组件。

一开始用的是uC/OSRTOS。熟悉它的人知道,它是一个微内核,提供了任务的调度、Mutex、Semaphore等基本的功能,但是像TCP协议栈、文件系统、堆管理(指malloc/和free)这些功能都没有,当然也包括没有相应的硬件驱动模块,如PCI、串口、I2C、IDE硬盘等。

第一次做的这个产品是一个DVR(DigitalVideoRecorder),CPU用的是AMD的SC520,是一块x86的处理器。因为公司小,所以整个DVR的嵌入式软件就我一个人做,这对于我来说是一个难得的机会和挑战。我所做的包括:

熟悉CPU

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

熟悉uC/OSRTOS并对其进行扩展

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

将MINUX操作系统的文件系统移植到我们的DVR上

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

将XINU中的TCP协议栈移植到DVR上

  • 我记得很清楚的是,当时对于TCP的滑动窗口的调试以及校验和的调试花了不少时间。
  • 可以说这一时期的工作,使得我对于操作系统的原理和实现非常的熟悉。

还有,我在这一公司使用过了逻辑分析仪去分析总线信号以解决问题,这些都是非常好的经历,都有助于提升对计算机系统的理解。

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

比如:

第一个挑战是处理器

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

采用的是RTEMS操作系统

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

对于编译器和C语言的理解不深

  • 比如什么是ABI(ApplicationBinaryInterface)?后来知道StackFrame和程序的调用栈的管理都与ABI有关系。
  • 在UTStarcom工作的初期,所有与操作系统相关的问题都是由我来解决的。

随着时间的推移,我逐渐意识到,在嵌入式系统开发中,除了技术能力之外,系统思维、设计能力、沟通能力等软技能也很重要。一个好的嵌入式工程师,不仅要精通技术,还要能够统筹全局,把握项目的整体架构,并与其他团队成员有效沟通合作。只有这样,才能开发出高质量、可靠的嵌入式系统。

以上是我对于嵌入式开发的一些心得体会,希望能对大家有所帮助。如果大家有任何问题或建议,欢迎留言讨论。

本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!

相关阅读

添加新评论