【转载】深入理解嵌入式开发

原来,做我们控制类的学生,以后如果能从事和本专业相关工作的话,最可能的就是程序猿了。

在这个计算机时代,只要是涉及控制的地方,基本都有代码控制的影子。甚至可以说是代码控制了这个复杂但有序的世界。

之前我还一直不敢相信我们专业以后的形象可能就是程序猿,直到看到这篇文章,CSDN专访许雪松的一个对话,我们是做嵌入式的,而嵌入式是属于程序猿范畴的。

所以还是接受这个现实吧,努力朝程序员的方向去努力吧。看来c/c++的基础还是要稳定的。

好了,还是看看前辈是怎么说的吧。

 

----------------------------------------------------------------------------------

 

许雪松,毕业于西北工业大学生物医学工程专业,现任必达测控技术总经理。15岁开始接触计算机编程,18岁学习C/C++编程,迄今已十多年有余,领导并参与大大小小几十个项目的开发及维护。涉及工业自动化、嵌入式计算机以及逆变器等领域。尤其擅长RTOS,如uC/OS-II、RTEMS,翻译RTEMS官方文档近千页。也擅长测量电路和开关电源的设计,现在在公司领导团队设计电池测试产品和大功率逆变器产品。

  • 一切源于爱好

CSDN如何在15岁接触到计算机编程的?

许雪松:1997年的时候,我15岁,读高一,学校参加市里的编程比赛。从各个班级里选拔一些成绩比较好的学生参加,当时我对计算机的理解仅限于这个名称。我在班里成绩还可以,老师问我是否愿意参加,反正多学东西没坏处,我就参加了。当时我不懂什么叫编程语言,从地摊上随便买了本basic编程的书(我的第一本计算机书籍)。学校为了能考个好成绩,从华中科技大学请来个计算机老师(姓唐,名嵩),他也是我的计算机启蒙老师。培训开始有很多人,不到一个星期就锐减到4个人。当时参赛的编程语言只能是QBasic或turbo pascal,也因为那本书的缘故,所有人当中只有我一个在搞basic。弄得唐老师一边讲完pascal,一边单独给我开小灶讲basic。那时候还是win95的天下,学校的电脑清一色的386,全部没硬盘,用5.25寸的软驱和dos启动盘工作。唐老师给我做了张启动盘,把QBasic和dos全部放了进去。学习过程是枯燥的,我老是把赋值语句当作现实数学里的方程理解,所以老是理解不了x = x +1……

CSDN是什么原因让你一步步进入嵌入式世界?

许雪松:主要因素是我的爱好。在同龄人中,由于特殊的机会,接触计算机相对较早,学习编程也早。记得高三的那年写过的C/C++代码就超过万行。大学的时候,由于所学专业正好和编程结合在一起。

我在大学第二个暑假,刚刚学完了数字电路,就想自己做个闹钟。当时在计算机系认识的几个好友说学校和台湾的凌阳建立了个实验室,推SPCE061A的单片机,我第一次听到这个东西,这个是一个能支持语音的MCU。于是找到实验室的老师,从他手里买了颗SPCE061A。从电子市场买了个盗版 protel99SE,画了个PCB,当时还不知道怎么绘制原理图。就是一根一根线硬那样连上去。画了近一周,PCB发出去,因为没钱,只能做白板。就是板子没有绿油,阻焊层,那个板子焊接起来讲究水平啊!特别的吃锡,省下下半个月的伙食费,买齐了元件,贴上板子,开始调试了。从老师那里借了个仿真器,开始编程。我的第一个单片机程序,代码量不大,也就是几千行。最终的产品是一个用我声音报时的闹钟,做完后,我把它送给我大学里玩得比较好的女同学。从此, 我对单片机程序产生了浓厚的兴趣,同样是计算机,还是这个来得过瘾。送给好朋友后那份兴奋我至今难忘,这感觉使我对嵌入式产生了浓厚的兴趣。

由于专业的原因,很多企业不愿意给予技术岗位。只好用嵌入式编程这个爱好敲开了企业大门,使我在这条道路上越走越远。

CSDN你第一份工作有很多的不如意,后来心态是怎么调整的?

许雪松:这其中有很多故事,今天回头用审视的角度去看,首先是自己有些自我膨胀;其次,自己涉世不深,不懂人情世故;最后,性格使然,缺乏对情绪有效地控制。

自己对工作比较上进,第一份工作的不如意,让自己很痛苦,痛定思痛。为什么我会痛苦?我有哪些问题?这些矛盾是怎么产生的?这个企业有什么优点、不足?如何扬长避短?当然这些问题并不是一下子就想到答案。第一份工作做了两年,将这些问题全部弄清楚后,就决定辞职。我相信,自己可以把握自己的职场命运。

  • 深入理解嵌入式

CSDN我们都非常熟悉Windows这样的操作系统,但却不一定熟悉嵌入式系统中常用的RTOS。以你经验谈谈嵌入式和实时系统是什么样的?

许雪松:学生时代和朋友说起,我们这代人生在windows下,长在windows下,以为世界上就windows这唯一的操作系统。好在现在有Android和iOS让很多人意识到除windows之外还有别的操作系统。

嵌入式系统是为了特定应用高度定制的软件硬件计算机系统。从广义的去理解,只要被定制,都可以算作嵌入式系统。如今,在家用的x86系统上,跑一个类似VxWorks、RTEMS等操作系统,当成一个家庭网关都可算是嵌入式系统。有时候,同行认为真正的嵌入式系统硬件也必须按照应用去定制。

操作系统就是个资源的管理器。管理计算机上的全部资源,如CPU的计算时间、内存、IO等。实时操作系统简单的说,计算结果不仅依赖于计算结果的正确性,还依赖于结果计算完成的时间。比如说,火警按钮,按钮按下,要在规定时间内处理完成,延迟太大或者宕机都是无法接受的。

CSDN嵌入式系统为什么对实时性要求那么高呢?多快才算是实时系统?是不是所有满足一定的速度都可称为实时系统?

许雪松:很多厂家并不需要RTOS,前后台也能满足其需要,但他们还是用了RTOS。实时操作系统的高效是为嵌入式系统广为接受的一个很重要的原因。高效有两层意思,一是用任务可以封装开发的逻辑,使应用层代码逻辑更加完整,减小开发难度,代码的复用程度会变高;二是,RTOS代码都比较简洁,算法的空间杂度和时间杂度都很小,能将MCU的绝大部分资源都留给应用层。反过来,大量的应用促使RTOS更加的可靠、更加的精炼,实时性也会更好。当然,如医疗电子、航天电子和工业控制本身,有许多计算是依赖于时间的,对实时性要求非常苛刻。

实时一个很大的误区是认为实时是快的意思Windows启动一个应程序,在刚刚关闭一个大型程序后和刚刚启动不久,时间是完全不一样的。如果RTOS启动一个应用程序的时间是10秒,那么,不论在任何状态下,RTOS启动这个应用程序都是10秒,有一些误差,但这个误差是在系统的允许范围内。实时并不是快,是对于一个特定的计算过程,它的时间抖动非常的小,一般都可以精确到毫秒级。

CSDN嵌入式编程相比PC编程,具有哪些复杂性?你认为学习嵌入式开发如何开始和深入?

许雪松:嵌入式开发最大的挑战是软件硬件同时成熟出了问题容易踢皮球,影响开发时间。然而,对于软件开发者来说,最大的问题莫过于软件代码的撰写。PC平台的封装非常完善,应用也非常广泛,没有明显的错误,极其稳定。嵌入式平台几乎没这样的资源和封装级别,且和一些寄存器相关。这些寄存器配置的顺序,值都有严格的规定,严格按照datasheet的要求做。嵌入式代码全新开发得太多,自身也有个成熟的过程,也存在着很多方面的问题。例如:代码的应用层和底层耦合、应用层的使用不当和造成底层顺序错误等等。嵌入式调试成本很高,调试手段相比PC也比较单一,对从业人员的要求更高,这都增加了嵌入式的复杂性。

第一次选择嵌入式,完全不知道它是什么。走到今天,完全是兴趣使然。国外开源社区很多高手,其实都是抱着玩的心态去做开发,玩得好,也就是开发的好;开发的好也就是玩得好。这样才能保持持久的热情。我们常说成事要靠坚持,其实坚持需要方法和态度。

嵌入式还是计算机科学应用的一个子集。所以,学习好计算机基础课程是非常必要的。国内很多从事嵌入式的朋友,都是如电子、自动化等非计算机专业毕业的,这种状态不利于嵌入式职业的长期发展。

对于如何学习嵌入式开发我个人认为:

 

首先要学习好计算机的基础课程;

然后要有编程量,嵌入式以C/C++语言为主,这么语言入门易,掌握难,唯有大量的练习和阅读,才能提高,建议可以的话写到十万行的量;

系统介绍嵌入式开发的书籍很少,建议看《程序员的自我修养》,可以对整个嵌入式开发的内在机理有个较为深入的认识。

CSDN:硬件开发平台有FPGA,ARM,DSP等等,哪个更好,能简单分析下吗?初学者如果要学习ARM开发板,该如何去选购?

许雪松:FPGA和MCU是嵌入式开发的两个不同领域:前者硬件多、后者软件多,应用的行业领域和背景知识差别很大。两者相互不能完全替代。一般来说,FPGA相对于MCU的市场,较为小众。至于DSP,它是以计算见长的一类MCU,并不适合跑调转指令太多的事务代码,会打断流水线,优势体现不出来。所以,DSP的应用和一般的MCU用法略有不同,比较侧重计算、优化。

ARM是近十年来嵌入式中常用处理器,随着Cortex系列的推出,其市场更加立体和全面。看目前市场的发展,选择cortex-M4cortex-A8的单板做相关的开发,会更贴近现在企业应用的偏好。但如果这类开发板若太贵,也不一定就要买一块Cortex的开发板。其实,在实际的硬件上主要锻炼的是:驱动的开发,系统的移植。而常用的驱动中最复杂的莫过于以太网和图形系统,开发板能完成这两方面的学习即可。

CSDN学习嵌入式开发的开发板是否一定要买?是否有比较好的硬件模拟器?

许雪松:可以直接在x86上做。我买过开发板,但是买了之后,就放在屋子里睡觉。因为可以直接使用x86平台做目标平台。

虚拟平台差异很大。目前,x86是虚拟做得最好的平台,可以在x86上实现所有的驱动。ARM的平台虚拟水平也要看具体型号。我曾今参加一个开源项目,将RTEMS移植到QEMU mini2440上,可惜QEMU mini2440 的虚拟器或多或少仍有点问题,但也可以解决大部分的问题。可对于学习操作系统的朋友,去解决虚拟平台的问题,有些不靠谱。所以,真心想学习的,就把x86当作嵌入式平台去写代码。毕竟,能比x86这种嵌入式还要复杂的系统,也是屈指可数的,其含金量毋庸置疑。

CSDN请简单介绍下哪些是常用的嵌入式系统?在这些系统中,如何选择适合自己的系统?

许雪松:uC/OS,FreeRTOS、rt-thread、VxWorks、ThreadX、RTEMS、ECOS。不下上百种。在这些系统中选择自己的系统可不是件容易的事情。

学习的朋友,我推荐uC/OS,有相关书籍,国内网上的资源也比较多。uC/OS仅仅是一个处理器时间的分配器,简单、易学。学好了,触类旁通,其他的也复杂不了多少。

由于商业应用比较复杂,涉及工具链、商业授权、维护、可靠性、易用性等问题。商业应用的朋友我建议开源免费的就选择发展时间比较长的系统如RTEMS、ECOS这种系统,或者直接选择有商业服务的系统。

CSDN在众多的实时操作系统中,你为什么选择RTEMS?现在还有开发用到RTEMS吗?如果初学者想精通一门RTOS , 你觉得从RTEMS开始可行吗?

许雪松:当年公司使用的RTOS除了版权问题,还有技术、代码的问题,迫切需要寻找替代品。通过互联网搜索到RTEMS,它在2003年加拿大航天部门综合指数排名中超过VxWorks。这让我产生了极大的兴趣,一个开源免费的操作系统RTEMS做得尽然比商业系统还要强悍,于是开始学习它。RTEMS的内部数据结构设计非常精巧,是一个知识的宝库。举个例子,在数据结构里,双向空链表插入第一个元素时与插入第二个元素操作很不一样。在RTEMS里,用特殊的技巧使得不需要做这种判断,直接插入就好。又如堆的管理、重复释放申请的指针,不会产生任何问题。而在uC/OS里,这是致命的。虽然RTEMS是上个世纪80年代末开发的系统,数据结构和内部的组织从今天的角度来看,仍然是非常先进的,是个含金量非常高的系统。

RTEMS的代码量比Linux小,又比uC/OS这种系统大几个数量级。其开发难度和应用难度相对较高。初学者若是有坚实的基础,可以从RTEMS开始学习;基础较差朋友,若有RTEMS的熟手带,也是可以的。否则不建议这样做,会挫伤学习的积极性,形成恶性循环。

CSDN对于软件工程师来说,能够使用一个很上手的嵌入式实时操作系统,在嵌入式领域行业中,绝对是相当于揣着一个高薪的铁饭碗。随着嵌入式领域行业的兴起,嵌入式的操作也在不断的改良之中,而且为了满足需要,嵌入式实时操作系统也是在被不断的更新与创造。你认为要成为一名优秀的嵌入式工程师应掌握哪些技术,具备哪些职业素养?同时,在你招聘嵌入式工程师这个职位的时候,你最看重的是应聘者什么能力?

许雪松:从小受到的教育就是,未做事先做人。这里蕴含一个道理,上层建筑固然重要,但更重要的是基础。一个优秀的工程师总有一天会面对一些问不到答案的问题。一个企业也总有新的东西,一个行业会发生技术变迁。所以,我始终认为,工程师的专业知识固然重要,但沟通、观察、创新、承受压力、前沿跟踪、学习、情商、反思、信息整合能力更加重要。

招聘时,除了考查专业基础,就是沟通、观察、前沿跟踪、学习以及信息整合能力。再有就是同理心,能不能换位思考。今年看新闻说是毕业生创历史新高,就业非常困难,企业需要的无非就是能做事的人。

首先,要踏实肯干,有一定的业务能力;

其次,愿意学,与企业一同成长;

再次,懂得度,最直接的莫过于付出与所得,往往不能太执着太计较;

最后,弄清楚自己喜欢什么,最好能把自己的爱好和工作统一起来。

CSDN嵌入式实时实操作系统是软硬件紧密结合在一起的计算机系统,软硬件结合方面你有什么心得可分享?

许雪松:举个简单的例子,开关电源的电感在一个时钟周期内,要满足伏秒平衡。其物理意义是,开关周期内电感吸收的能量和释放的能量应该是相等的。否则,系统不会平衡,换据话说,就是不稳定。对于软件系统,特别是复杂的大型系统,虽然有严谨的理论去判断一个软件模块的稳定性。但对于程序员调试,并不是一个简单轻松的过程。可以借鉴伏秒平衡的思路,一个大型的代码在一个状态结束时,除了一些统计变量之外,应该是回到最初的状态,否则,系统会不稳定。具体的体现:内存释放与申请,系统输出的结果等应和最初状态一致。

在软件抽象一些客观事物时,可以参考硬件的抽象。比如说以太网相对于处理器是个低速设备,为了解决无休止的中断,DMA可以大大缓解处理器的压力。如果处理器抽象成一个类、以太网抽象成一个类,那么DMA可以看作一个通信关联类了。其参数的抽象和深入的分析,对软件设计和硬件设计都是个极大的促进。

从这两个例子看,软硬结合,其实是洞悉硬件和软件的本质,解决实际工程中的问题

CSDN实践中你们嵌入式项目中的移植性如何权衡如何保证的?

许雪松:移植性并不是嵌入式软件中优先保证的目标,保证移植性就要写一定的框架代码,框架代码的复杂度高,那么系统的开发成本自然就上去了。这里还主要是具体问题具体对待,对于需求增长的产品,选择系列的处理器,采用操作系统,借用一些成熟的、轻量级的中间件,平衡成本与开发之间的一些需求。

CSDN迄今为止你已工作8年,领导并参与大大小小几十个项目的开发及维护工作。在项目管理上你有什么心得可分享?

许雪松:我所在的团队较小。不适合使用CMMI等重量级的方法,仅仅适合轻量级的方法。开发讲求质量和效率,我们知道做事情都有一定的流程:目标→过程→结果→验证结果是否符合目标,最后再去适当修正。无论CMMI、敏捷等都是想办法在在有限的时间和资源内保证结果与目标的高度对应。我认为项目管理其实就是对资源统一调配、克服风险,在有效的时间内保证结果与需求对应的过程。

对于一些小团队,项目资源紧张的情况,没有时间写文档,风险不能及时的评估,特别是嵌入式开发,分享以下经验技巧:

从工具方面,如选择一些能提高效率的工具,用C++开发界面用QT比VC有效率;使用图形库扩展传统的系统,使之易学易用,提高开发效率。嵌入式中可以使用操作系统,将应用层和底层彻底隔开,先在成熟平台上开发,有一定成熟度后在转到目标平台上;

从人方面,选择技术贴近项目的技术人员,熟悉产品需求的人员做开发,对需求理解准确,不易产生错误;用人要选择善于沟通的人,负责人或Leader对于不善于沟通的人需要做好缓冲;团队负责人定期打气,融洽成员关系;

从方法方面,对项目的设计思路做一个白板讲解,让有经验的工程师听听,有什么不足和可取之处。对照需求一条条做个评审,避免设计的盲区;硬件开发有许多不可压缩的过程,不妨将硬件资料压一段时间,让其找出三个错误再发出;项目定期设立检查点,项目设计者应该将交付物工作量缩小,每隔一段较短的时间,比如说3~5天就可以交付一个工作。会议不要长,保证每次有问题都能给出结果,即使给不出结果,也能给出暂时的办法;

从技术方面,使用一些公司长期在用的技术,团队熟悉的技术,可以极大提高团队对抗风险的能力;项目经理需要辛苦一些,要做一些测算。如人员效率、产量、质量等度量参数,学会把这些参数利用到下一个项目中;在项目开始之初,多找些业内专家,仔细聊聊,多找些技术方案,选择最合适的使用。客户提出的需求不一定全部合理,学会和客户沟通,降低技术方面的开发难度,提高其它方面的满意度,也可以使整个项目很成功。

CSDN嵌入式开发一直是非常火爆的技术领域,你怎么看当前嵌入式的发展和应用?另外当下移动互联网和云计算大行其道,你觉得嵌入式开发未来都有哪些发展机遇?

许雪松:随着科技的进步和各行各业的发展,嵌入式还会有更大的作为。像物联网、车联网和智慧城市等等,都是非常具有前景的领域。

移动互联网和云计算是当下热门技术,嵌入式在这里大有可为。我们注意到,无论云技术还是互联网、物联网等等,都少不了互联,这也就意味着复杂的通信和协议。我想这不是一个系统平台能通吃的,嵌入式会大有可为。通信节点、数据采集、并行计算、终端控制,我想会出现大量嵌入式的身影,特别是嵌入式操作系统和RTOS也将大有可为。

 

  • 创业去

CSDN你在11年7月,应朋友的邀请一起创业,创立了必达测控技术有限公司,当初你为何选择创业?你怀着怎样的心情?

许雪松:我起初也和很多刚参加工作的人一样,抱怨过不如意,抱怨过工资少,不公平。那时看问题的角度很单一;我做研发时,设计的东西被老板批评,总不能全部理解。现在好了,全部都理解了,有些可能体会更深。

当时出来时,没揣着对未来的憧憬是不可能的。但更多的是让自己更加完整、成熟。

CSDN你毕业之后第一份工作是嵌入式软件工程师的职位,两年后换了工作,半年后就被提拔成项目经理,一做就是四年,之后毅然与朋友创立了必达测控成为了一名管理者——出任总经理(主要负责技术和内部管理),你是如何进行角色转变的?

许雪松:我有个习惯,就是反思。反思一件事情为什么做得不好,哪里做得不好,有什么改进的办法,有什么规避的措施,从什么角度看更合理等等。这个可能是使自己能转变的一个原因。其实,自己没有说一定要做什么,只是身边出现了这样的机会。我觉得我可以试试,让自己有更多经历。

CSDN现在你在公司领导团队设计电池测试产品,大功率逆变器产品,为什么选择这一行业作为自己的创业方向?在实际的操作中遇到最大的问题是什么?

许雪松:新能源未来会有非常美好的前景,电池作为能源转移存储的中间环节,也必将经久不衰。这都促使我看好这行,更重要的是自己从事这行很久,也非常熟悉这个行业。

对创业来说,最大的问题就是资源,这里的资源不仅仅是钱,还有人、市场等等。有限的资源对抗几乎无限制的问题,权衡是最难的。毛主席说,农村包围城市。做企业,要有打持久战的决心和毅力,更要有舍得的智慧。

CSDN你目前做得企业是工业企业,属于实业。最初阶段你是否感觉到压力?你的创业过程中最大的困难是什么?

许雪松:当然有压力,而且很大。小时候,常听到一句话是,困难是暂时的。我也这么告诉自己。后来,自己明白了。困难怎么可能是暂时的?困难是一种常态。主要矛盾制约着事物的发展,次要矛盾也会变为主要矛盾。目前最大的困难是资源紧张,我想这会伴随我相当长一段时间。

CSDN你的梦想是什么?

许雪松:我有很多梦想,现阶段:

1.让公司越来越好;

2.希望家人健康;

3.抚养我孩子健康成才;

4.为RTEMS多做一点事情(出书)。

CSDN在你一路走来,遇到一些浮躁的心境时是怎么处理的?对刚进入这个领域的人有何建议?

许雪松:我是个挺爱反思的人,每当这个时候,我想,总不能想歪招过关。这事干多了,命运就交给别人了。多点把握在自己手里没有坏处,结果不好时,想起来没啥后悔的。

中国经济正在转型,浮躁是难免的。这里做到:

1.少和别人去比,在没有充分了解所有要素前,比只会让自己盲目乐观或悲观;

2.少去抱怨环境的不公平,种子没有抱怨过,它只是在合适的时候发芽,开花结果。静静等待,修炼自己。

posted @ 2017-03-28 21:25  Andrew_qian  阅读(678)  评论(0编辑  收藏  举报