嵌入式工程师入门的那些事

嵌入式工程师入门的那些事

广东职业技术学院  欧浩源

【如何才算嵌入式工程师入门了?】

        嵌入式应用工程师是一个软硬件兼顾的职业。当然,到了具体的工作岗位可能会有嵌入式硬件工程师和嵌入式软件工程师之分等。不管怎么细分,只要是做嵌入式应用开发的,你设计的软件就要在硬件上跑,你不熟悉硬件平台可以吗?你设计的硬件,也要考虑软件上面的事情,没有一定软件设计思维也是不行的。

    对于一个嵌入式应用开发的入门者来说,是没有软件和硬件的偏向之分的,至少我是这样认为。因为对于基础的技能,必要有一个全面的掌握,这样你才能在嵌入式开发的道路上走得更远,才能具备从入门走向优秀的可能。

    那么,如何才算是嵌入式工程师入门了呢?

    我认为,至少能够独立设计和制作出一款嵌入式应用系统,就算是很少很小的系统也可以。

    那么,要完成一款嵌入式应用小系统,你至少要做下面的一些工作:

    1. 设计并确定系统的功能模块,形成设计概要文档。

    2. 选择嵌入式微处理器,确定系统的功能框图。

    3. 对主控芯片的引脚进行定义,形成引脚功能分配表。

    4. 根据功能框图,对主要的元器件进行选型。

    5. 设计并确定各个功能模块的电路原理图。

    6. 利用Protel等电路设计软件,设计电路原理图。

    7. 原理核查无误,开始设计PCB图,并形成BOM表。

    8. 选择合适的厂商,委托其制作电路板,并购买电子元器件。

    9. 焊接电路板,并进行简单的测试,确保不短路、无虚焊等。

    10. 编写程序,对各个功能模块进行测试,确定都能正常跑起来。

    11. 编写和测试相应的应用程序。

    12. 整理资料,形成开发文档,如有必要,还可以记录自己的开发心得。

    也许有人要问,入个门真的要这么复杂吗?现在有很多培训机构,上来就学习操作系统移植、驱动程序编写、项目应用开发,既高端又快速。我也不否认,这也是一条嵌入式应用快速成长的途径。如果你具备了上面描述的能力之后,再去接受培训,那不是更容易理解培训内容,成长的不是更快吗?

    《大学》里面有句话:“物有本末、事有终始,知所先后,则近道矣”。我始终认为,对于一个初学者或者人门的人,必须有扎实的基础,才能真正的从入门迈向优秀。

 

【入门都需要学习哪些基础技能呢?】

        对于一个入门的初学者来说,再努力也不为过。我想要达到上面所描述的能力,成为一个真正嵌入式应用开发的入门者,可能要掌握下面几项基础知识和必备技能,大家可以参考一下:

    <1>理解三门基础课程:电路分析、模拟电路和数字电路

    嵌入式系统,上面都是电子元器件,都离不开电流和电压。在学习这些课程的时候,你可能觉得毫无用处。但当你去设计一个系统,或者处理一个系统的硬件故障时,你可能会发现需要借助这些课程的知识了。

    在读书的时候,我最讨厌这三门课,而且当时觉得都是理论,毫无实际用处。特别是电路分析,相当的抽象。对于这三门课,我并不认为在开始就要把它们读透,当然你有这个毅力和能力最好不过。对于初学者,我倒觉得可以采用迭代学习的方法。

    在初学的时候,最起码要把基本的东西弄懂。相对来说,电路分析要求没有太多,懂得简单的电路分析方法就够了。模电和数电要求会多一些,最起码半导体、三极管、典型的运放电路、振荡电路、滤波电路、电源电路、A/D转换电路、数字编码电路等等这些常用的电路要掌握。不然,你在设计电路的时候,就是无米之炊了。

    在将来设计和处理问题的时候,如有需要,就回头找资料,翻书本,既可以吸收学习新的知识,又可能加深巩固旧的内容。如此反复以往,在不久的将来,一定能都透彻理解这些课程,而且会有新的理解和深刻的认识。ADI公司的工程师写了一本书《嵌入式系统中模拟设计》,我认为不错,有兴趣的不妨看看。

       <2>掌握常用的元器件的选用方法与其典型的电路应用

    俗语讲:巧妇难为无米之炊。一个理论知识丰富的工程师,如果对元器件的原理和应用不熟悉,是很难设计出好的嵌入式应用系统的。这就犹如一个好的医生,能够正确分析病理,找到病症,可以不懂药物,开不出药方,一样治不好病。

    这个能力如何才能具备呢?

    只能靠平时不断积累,而且是贯穿整个嵌入式开发生涯,我想别无他法了。

    在这个地方,我有一个经验可以和大家分享:养成做开发笔记的习惯

    拿一个好的笔记本,无论是学习还是开发过程中,遇到新的元器件应用,就将其记录在本子上。这个记录至少包括:元器件的引脚图,封装图,重要的电气特性,结构原理,应用电路,如果涉及接口编程的,要把核心的程序记录下来,最好还能将你的开发体会记录下来,或者将别人的开发经验也可记录下来。

    倘若能够一直坚持下去,这个笔记本就会成为你的一个嵌入式应用开发宝典。日后在设计系统的时候,需要什么元器件,翻一下笔记本,就什么都有了,总比你去翻数据手册强,要知道一本数据手册可有好几百页的。

        <3>熟练掌握一款电路设计软件以及电路设计原则

    嵌入式应用系统首选要通过硬件表现出来,有了硬件平台才能在上面编写代码,实现应用。要制作硬件平台,首选要设计硬件电路。这就要求你能熟练使用电路设计软件,以及懂得一些软件设计的规则。

    目前常用的电路设计软件有不少,不过常用的也就是Protel,也有很多公司用Designer,不过两者很接近,会用其中一款,掌握另外一款很容易。对于工具软件,只要多用就会熟练的了。现在网上教程很多,很容易学习的。我在网上有一个文章《物联网硬件技术实训-攻略手册(2016版)》,不过讲的是Protel99软件的使用。这是一个99年的软件工具,你可不要小看它,短小精悍,现在还有不少公司的工程师在使用能。初学者就应该从简单和经典的入手

    对于电路设计原则,网上有很多文章,也有不少书籍。对于初学者来说,不会涉及高速和高频的电路,在布局走线和地线设计上没有太多的讲究,只要合理、美观就可以了,当然线不能太细,线宽也不能太窄,起码要符合制版公司的生产要求。这也是一个积累的过程,随着你学习的深入,设计经验的丰富,这部分知识也就悄悄的多起来了。

    电路板设计出来了,还要亲自发出去生产一下,通过这个过程,你会了解到生产电路板的一些工艺要求,以及体会一个设计者如何与生产者沟通。在这个过程中,你知道了选择多厚的板,为什么要开钢网,什么叫邮票孔,怎么样拼板,要不要飞针测试,面积大的电路板原来还有菲林费.......

        <3>必须精通C语言程序设计和典型的设计思路

    如果你不去做系统移植的工作,C语言基本可以满足你对硬件系统的所有编程要求。C语言是嵌入式系统开发的一个工具,对工具使用的熟练程度,直接影响系统的开发程度。所以,我认为必须要精通C语言程序设计,而不是会或者掌握。嵌入式C语言程序设计和标准的C语言程序设计还是有一些不同的地方,这个大家需要体会一下。在标准C语言应用中,宏定义、条件编译、头文件这些知识点并不被重视,但在嵌入式系统中却确随处可见。在嵌入式开发中,很多时候要对寄存器进行操作,所以在指针方面的应用也会很多。如果是数据采集或者物联网数据传输的应用,可以涉及到到大数组的处理,而在进行协议解析的时候,又要在大数组中,对很多小字段进行处理,对于RAM区不足的处理器,你还不能够定义小数组来处理小字段,只能运用指针设计算法。

    对于简单的嵌入式应用系统,我们可自己从头到尾自己编写一个系统应用程序,而对于复杂的嵌入式应用系统,就需要移植一个操作系统来进行任务管理了。对于嵌入式初学者来说,能达到前者水平就可以了。要自己独立编写一个合理的应用程序也不是一个简单的事情。目前这方面的资料和书籍有很多,我三两句也讲不清楚,不妨推荐两本书给大家参考一下:

    1.安德鲁.凯尼格的《C陷阱与缺陷》

    2.周航慈的《基于嵌入式实时操作系统的程序设计技术(第2版)》

       <4>理解51单片机的原理结构并进行编程训练

    对于这一点有不少人会提出质疑,也有人认为没有必要,这是在浪费时间,这说的有一定道理。但对于初学者,我认为还是要从最简单、最经典的入手。首先,51单片机的结构简单但是极具代表性,很多嵌入式微处理器都由51内核演变过来;其二,关于51单片机的学习资料很多也很容易获得,学习成本很低;其三,当前不少SOC片上系统都是采用51内核作为处理部分,不见得过时。

    当前不管是简单的8微处理器还是32为ARM处理器,都是一种“内核+外设”的结构,其中的差异是内核的性能高低和外设的复杂程度。当然,51单片机也是“内核+外设”的结构,只不过性能低,外设少而已。虽然在实际应用中已经很少了,但作为学习平台,特别是入门学习那是相当合适的。我相信当前很多高校都还在用51单片机作为主流的教学平台呢。

    51单片机虽小,但五脏俱全。4个8位的I/O端口,其中P3口作为复用端口;2个外部中断输入,2个定时计数器,1个串行接口。内部有5路中断,由IE寄存器进行使能选择,由IP寄存器进行优先级设定。看起来与现有主流的处理器结构好像相差不大,只是少了一些外设,中断处理好像有些差别等等。

    就我个人的经验来看,熟悉51单片机的原理和应用之后,再去接触当前的主流单片机或32位的ARM处理器(没有上操作系统的32为处理器只不过是款复杂的单片机),是相当容易上手的。当然,你不从51单片机入手,直接找一个主流的8位单片机入门学习也是可以的。现在很多微处理器提供的集成开发环境都很智能了,可以辅助你生成一些程序框架。就开发者而言,能够加快你开发的进度。然而,对于初学者来说,由于集成开发环境辅助做了一些工作,封装了部分的代码,反而不利于对知识的理解和学习。

        <5>掌握一款主控微处理器的开发并掌握常用接口模块的设计

    上面说的51单片机学习只是让你能更好的入门而已。在实际的应用开发中,用到51单片机的场合并不多,所以,还得掌握一款主流微处理器的开发。由于有了前面单片机的学习基础,再去掌握一款新的微处理器会很容易。在这个部分,主要的精力不再是微处理器本身的学习,而是借助这个微处理器去进行一个经典应用和常用接口模块的学习。

    如果说元器件电路模块是硬件资源的积累,那么,常用接口模块驱动程序则是软件资源的积累

    将来在你的产品设计中,可能用到很多新的芯片和元器件,只要它的接口是SPI接口、IIC接口、设置串口等你熟悉的接口,那么对于你来说,它就是一个旧芯片和元器件。因为微处理器面对的不是芯片,而是接口。对外设芯片的操作本质上就是通过数据接口设置外设芯片的寄存器而已。不管是多么先进或多么新颖的外设芯片,只要用的典型接口,那么通过接口驱动程序建立数据通道,按照数据手册对寄存器进行操作,很快就可以应用自如了。

    所以说,熟练的掌握各种接口的编程和常用模块的设计,是多么的关键。

        <6>掌握一些常用工具的使用并具备一定的焊接能力

    掌握一些常用的软硬件工具,是调试必备的技能。对于初学者来说,不要急着去研究频谱分析仪、数字毫伏表这些高端的工具,只需要掌握普通常用的工具就足够了。硬件上面,万用表示波器是必须要掌握的,能用数字电源信号发生器那是最好的了。对于一些特殊的工具,等你做到相应的应用的时候再去使用都不晚,当你要设计一个高精度的热电偶数据采集器,你才会使用到热电偶校准器。除了硬件工具之外,我们还得掌握一些常用的软件工具,最典型的就是“串口助手”了,如果你要做以太网方面的应用,你还得会使用以太网抓包工具,抓取网络上的数据包进行数据分析。

    另外,你还需要具备一定的焊接能力,至少能焊接0.65mm间距的SSOP封装的芯片。现在也有不少芯片采用QFN封装的,看起来很难焊,实际上掌握了要点,手工焊接也是很快的。不用说对于初学者,就是是在小企业的嵌入式工程师来说,可能都没有专门的焊接人员配备给你,所以,很多时候都得自己焊接元器件,最起码在进行硬件调试的时候,要拆下来,焊接上去的时候,你总不能等别人帮忙,或者老是去麻烦别人呀。

        <7>自己亲自设计一个学习板并进行程序开发

    我觉得这是每一个嵌入式应用开发入门者的成人礼。当你能够按照上面所描述的步骤完整这个过程的时候,说明你已经正真的踏进了嵌入式应用开发的门槛。然而,完成嵌入式工程师入门仅仅是一个事业的开端,后面还需不断进取,在入门的基础上,进行操作系统的移植、驱动程序的编写、实际项目的磨练,小步快跑,迭代升级,才能向一个真正优秀嵌入式工程师迈进。

 

【小结及其他】

    嵌入式应用开发涉及的知识点很多,初次接触往往感到无从下手。没错,与一些高级编程语言“易懂难精”的情况相比,嵌入式应用开发的入门是比较难的,但是,随着知识的积累和经验的丰富,后面的路会越走越宽,越走越顺。广大的嵌入式应用开发入门者应该充满信心。我一直都认为嵌入式应用开发就像一场马拉松,必须一步一个脚印,积蓄能量,逐步进阶,才能越走越远的。

    有一些朋友会参加知名培训机构的嵌入式课程,一开始就在功能复杂的开发平台上学习移植操作系统,编写底层驱动程序,切入大型嵌入式系统项目开发等等,起步很快,学习的内容也很潮,做得实验也很高端,当然在他们之中,有很多人是相当出色,工作也会非常优秀。然而,他们的起点很高,效果可能也很好,但是,我始终认为还是要有一些扎实的基础作为支撑的。如果在一场马拉松中没有足够的能量储备,一旦跑得太快,后面可能会跑得不远。

    时代不断进步,科技不断发展。嵌入式应用工程师也应该与时俱进,密切关注行业动向,偶尔要去参加一下芯片厂商举办的产品发布会或讲座,更新知识,认识同行;每年去看看一些大型的电子展会,开拓思维,开开眼界。

posted on 2017-05-25 17:21  小蜜蜂老师  阅读(5021)  评论(2编辑  收藏  举报