本节书摘来自异步社区《嵌入式系统开发之道——菜鸟成长日志与项目经理的私房菜》一书中的第1章,第01-05节,作者 邱毅凌,更多章节内容可以访问云栖社区“异步社区”公众号查看。
01-05基本职能:老鸟也曾是菜鸟
PM:“请进!这是我们的实验室,该有的设备一应俱全,以后你应该会常常待在这里,这是示波器,如图1-17所示,在学校用过吗?那边拉了一堆线到板子上的是逻辑分析仪。”
菜鸟:“上实习课时曾经看过,但好像和你们的不一样,学校的仪器都很旧。哇!你们的还是彩色的!”
PM:“就是没用过啰!无妨,这很简单,以后我们会教你使用的。还有,你看一下,这是我们目前产品的电路图1,如图1-18所示。”
菜鸟:“好像很复杂,我一看这个东西就头大,密密麻麻的谁看得懂?我除了要用这些测量仪器外,也需要会看原理图?”
PM:“是啊!不然你怎么写驱动程序?”
菜鸟:“不懂!我之前用过微软的DDK写过一个USB设备的驱动程序,也没用过这些东西啊。”
PM:“应该这么说,驱动程序也是分种类与层次的。我来谈谈你在Microsoft DDK上做的驱动程序,首先已经确认硬件是OK的,再来基于微软已经成熟的驱动程序平台来开发。而嵌入式系统工程师在开发驱动程序的状况通常是从无到有的,更不好的消息是,开发初期硬件设计还没确定,我们的固件工程师通常还要协同硬件工程师一起帮硬件板子调试。在这样的状况下,你不测量信号,怎么知道LCD的Framerate(如图1-19所示)是否符合日本市场的70 Hz要求?怎么知道键盘的反应Timing是对的?怎么知道某个芯片的电源开关已经打开,并已开始运行?除此之外,有时还必须同时测量多个信号间的关系,特别是在调试的时候,如图1-20所示。
测量信号可以让固件工程师知道目前硬件的状况,写一堆驱动程序的目的不就是为了驱动并控制硬件吗?不会有人这么优秀或运气那么好,程序写完,一执行就OK了,如果你要调试,怎么可能自己不去测量信号?总不可能要我派个硬件工程师给你当助手吧!”
菜鸟:“嗯,我可以理解用示波器测量信号确实是固件工程师必备的技能之一,那原理图呢?”
PM:“你不看原理图,怎么知道要测哪里,而且我是说固件工程师必须会‘看’原理图,我可不放心让你来‘设计’原理图,电路设计是硬件工程师的工作。嵌入式系统开发工程师必须“多才多艺”的另一个原因,是为了提升自己的工作效率,项目中其他人都很忙,我们不希望软件工程师遇到了简单的硬件问题就停下来等待硬件工程师的帮忙。而且你看,那位在改驱动程序的是位硬件工程师,而那位软件工程师居然也学会了拆换芯片。
年轻人多学一点有好无坏,久而久之,你会更了解这个业界的生态,而不是只懂软件或写程序的事情,懂吗?”
菜鸟:“我很有兴趣学习新的知识,也愿意接受挑战,但还是有点怕……”
PM:“我已经说过很多次了,别担心,我们会培训你的。以下是我认为要成为一个优秀的嵌入式系统软件开发者所必须具备的基本职业技能。”
- 要会写程序,尤其是C语言,而且程序必须精简有效率
- 数据结构与算法
- 完全了解计算机系统的运行方式
- 操作系统的概念
- 懂得系统的整个架构,包含电源管理等
- 必须了解硬件设计的精神与架构,要能看得懂原理图
- 基本测量仪器(电表、示波器等)
笔者遇到过许多博学多闻,看起来什么都懂的高手,其中有位高手令人印象深刻。他主要的工作是设计CPU,当该CPU准备推广上市前,他会帮忙设计评估板(或实验板)的原理图2,如果有空的话,他也会自己布局评估板线路,当评估板洗回来后,他会亲自验证,焊零件也都自己来,接下来还要写程序验证。他们公司提供给客户的评估板和示例代码都出自他一人之手,而他居然还是CPU的设计者!等到实际深交之后,才讶然发现他并非信息电机本科毕业生,本身是数学系毕业,在当了一段时间的中学老师后,才“转战”到信息界。
笔者提这个例子并非鼓励你要做一个通才,其实就在某个领域内出类拔萃也很好,毕竟这是一个精细分工的世界。笔者要点出的是,知识工作者必须放开心胸,只要是对工作或者对达成任务有帮助的,软件工程师不要排斥去学硬件的知识或技能,硬件设计者亦然。笔者常常听到这样的对话。
硬件工程师:“我觉得你们会写程序好厉害,想要什么功能改一下就好,那么复杂的程序是怎么写出来的?”
软件工程师:“我觉得你们可以做出一台实体的机器才厉害,什么电阻、电容的,我一个都搞不懂,那个原理图密密麻麻比我们程序复杂多了!”
笔者会给这两位嵌入式系统开发工程师一人一句建议:
软件工程师硬起来!
硬件工程师软下去!