序言

市面上电子产品琳琅满目,业界正在使用的CPU与IC多如繁星,嵌入式系统开发的技巧数不胜数,书店里讲授嵌入式系统的书籍繁杂如过江之鲫,更不要说您在Google搜寻“embedded system”会出现多少相关网页……嵌入式系统是计算机产业中非常特殊的一个领域,几乎没有一个电子产品或嵌入式系统开发项目是完全一样的,身为这个产业链中的一员,面对排山倒海而来的信息,您该如何制定自己的学习目标?

所谓“一法通,万法通”,嵌入式系统开发也是如此。如果只专注于研究某个CPU的功能或某个产品的特性,实际意义并不大。下个产品开发方案可能是完全不同领域的应用,例如前一个项目开发的是多功能打印机,下个项目可能是DVD播放器,当然使用的CPU也会有所不同。所以重点是该如何从繁杂的信息中萃取出放之四海而皆准的观念。作者希望能将自身的经验与见闻整理成真正有用的观念,借着轻松的行文风格,传达给想加入嵌入式系统这一产业的读者,希望本书可以让对嵌入式系统开发有兴趣的读者少走一些冤枉路。

让我们从一个面试的场景开始。

应征者是刚毕业的信息专业的本科生或硕士生,公司负责面试的则是具十年以上消费性电子产品开发经验的项目经理,目前带领该公司的研发团队,负责某日本国际大厂委托的电子字典产品开发项目。

项目经理:“我觉得你的学习经历以及专业技能都符合我们这个职缺的需求,工作内容是消费电子产品开发,简单地说就是现在最热门的“嵌入式系统”,我们公司目前承接日本某大厂的电子字典开发项目。”

菜鸟:『其实我有点担心我的能力是否真能符合贵公司的职务需求。虽然我在学校修过微处理器课程,但对所谓的“嵌入式系统”仅有粗略的概念,不但汇编语言没写过几行,驱动程序也没碰过,更不要说什么实务的经验了。还有,嵌入式系统的程序要怎么写?用什么API啊?』

项目经理:『别紧张,你会写C语言程序吧?操作系统、数据结构、算法和计算机原理都学过吧?这就够了,其他的你进来后我们会慢慢教你。此外我们有自己的硬件架构和系统,所有的API都是我们自己写的,要用到Windows或Linux那套API的机会恐怕不多。』

菜鸟:『其实我对Java比较熟,公司的开发案会用到Java吗?』

项目经理:『恐怕不会,我们用的CPU执行时序只有24 MHz,而且客户对产品效能要求相当严格,我想都没想过要跑Java。』

菜鸟:『什么?24 MHz?我的计算机都飙到3.2 GHz了,还是双核的,24 MHz的CPU能做什么?』

项目经理:『放轻松嘛,除了跑XP或Vista外,可以做的事情多了。有机会的话我会慢慢讲给你的。』

菜鸟:『冒昧地问一句,电子字典这样的产品有什么技术可言呢?好像蛮low end的。我刚刚毕业,我希望能在第一个工作中多学点东西。』

项目经理:『开发执行于PC上的电子字典系统也许很简单,但在24 MHz的CPU上,需要的技术可比你想象的还要多,细节我就不详述了。此外日本厂商对品质的高要求我想你也略有耳闻,不但要机器稳定、耗电量低,死机更是天大的罪恶,在这样的前提下,需要的技术恐怕真的比你想的多得多。

此外,在开发电子产品的过程中,你可以学到嵌入式系统的观念、产品化的流程及项目管理的技巧;我们还会教你使用示波器、逻辑分析仪等信号测量仪器,当然你还必须会看电路图。』

菜鸟:『吓,我是学软件的人耶……』

项目经理:『就像大部分硬件的人也会害怕写程序一样,真的不需要有这种莫名奇妙的排斥与担心,其实只要逻辑观念清楚就可以了。试想,当你要把你的程序放到某个硬件板子上执行,机器上电后执行的第一行指令就是你的程序,而你是写程序的人,怎么可能不清楚这个CPU的运行方式与这块硬件板子的电路配置?』

菜鸟:『好像有点懂了,似乎是蛮好玩的。问一个私人的问题,我觉得现在手机好像很红,我对手机的开发还蛮有兴趣的,公司有机会开发手机吗?』

项目经理:『我刚和你说的工作内容是“消费电子产品”或“嵌入式系统”的开发,在某个层面上,我觉得开发电子字典或手机所需要的基本知识是一样的。等你做了几个产品后,有天你会突然顿悟的。』

菜鸟:『好像有点玄……』

项目经理:『如果你愿意进来,我会让你在一件件任务中学习的。』

这些年来“嵌入式系统”一直是个被喊得震天响的名词,但真正了解其内涵的人并不多。因为离开学校已久,笔者曾试着从面试新人或训练新人时做简单的调查,却惊讶地发现几乎所有信息本科毕业生(包含研究生)或具两三年软件开发工作经验者,他们可以把“嵌入式系统”的定义说得头头是道,但只有很小部分人对如何实际操作有概念,更不用提一些产品化的细节或注意事项了。

很多事情学校不会教也无法教,因为那需要实际经验。操作系统的教科书不会教你boot loader、context switch等的实际操作,或软件工程课的老师无法讲授在人力不够的状况下如何去执行书本讲的那一套系统!

笔者在业界多年,深知中国台湾省硬件厂商被客户压榨或同行削价竞争之苦,而中国台湾省商用软件开发公司的规模远不及欧美国家,甚至印度,唯有透过软件及创意来增加硬件的价值才是台湾省信息业的出路。所以训练信息本科学生,使其具备嵌入式系统开发的相关技能的确刻不容缓。

现在的新人都需要一到两年的训练,通常是必须参与某个产品的开发工作之后,才能真正了解嵌入式系统开发的本质,笔者认为这个时间应该压缩到就业之前。市面上有关嵌入式系统的书籍很多,但通常只能讲述一些基本的观念,对实务观念点到即止,其他则在某个特定平台上深入钻研,这些对真正嵌入式系统开发的帮助是微乎其微的。从这些书中,读者可以学到怎么在ARM的评估板上写程序、怎么架构embedded Linux系统、如何把Java VM移值到嵌入式系统上……如果工程师碰到的项目是使用日商SEIKO EPSON特制化的CPU开发手持式电子装置,或者使用8位8051加上凌阳的DSP,开发类似电子狗的玩具宠物……这些书能帮上什么忙?

其实这行的高手很多,也许大家都忙于工作,愿意(或有空)分享者少之又少。笔者愿将多年嵌入式系统开发的经验聚集成书,基于电子产品的多样性,阐述真正对读者有益的观念,再加上实务上发生的案例及其解决方案,读者应当可从中学到与其他教科书不同的“嵌入式系统”。

希望本书可达到拋砖引玉的效果,让嵌入式系统教育更为扎实,让中国台湾省的信息业更上一层楼。总之,这不是一本全都在讲述何谓嵌入式系统的书,更不是只教你在某个特定平台上写程序的programming guide,笔者希望通过许多实例,让读者从中学到嵌入式系统项目管理的观念及真正实作的技巧。

笔者才疏学浅,虽竭尽心血并经多次校正以成本书,但其中难免错误,希望高手前辈不吝指教,万分感谢。