现代嵌入式系统开发专案实务(txt+pdf+epub+mobi电子书下载)


发布时间:2021-03-31 01:37:59

点击下载

作者:邱毅凌

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

现代嵌入式系统开发专案实务

现代嵌入式系统开发专案实务试读:

嵌入式技术与应用丛书

现代嵌入式系统开发专案实务

CIP号:第075049号

ISBN:978-7-121-08838-4

中图分类:TP360.21

关键词:微型计算机-系统开发

北京,2009/07,电子工业出版社

版次:1

印次:1

价格:56.00

印数:4000册

印张:26.5

字数:678

开本:787×1092 1/16

语种:中文摘要

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

所谓“一法通,万法通”,嵌入式系统开发也是如此。如果只专注于研究某个CPU的功能或某个产品的特性,其实际意义并不大,因为下个产品开发方案可能是完全不同领域的应用!本书希望能将作者自身的经验与见闻整理成真正有用的观念,借着轻松的行文风格,传达给想加入嵌入式系统这一产业的读者,希望本书可以让对嵌入式系统开发有兴趣的读者少走一些冤枉路。邱毅凌 编著田宏峰 责任编辑高买花 其他贡献者推荐序 1

苹果计算机iPod和iPhone蔚然成风,意味着MP3 player、智能手机、游戏机等消费性电子产品已逐渐取代PC,成为下一时代主流数字产业,对于中国台湾省信息产业的升级扮演关键性的角色,而它们幕后的核心技术就是多媒体嵌入式系统。好的嵌入式系统,可以让硬邦邦的硬件更有价值,为摆脱代工的低利润率,台湾省业界对相关人才需求巨大,但目前学校信息专业的教育显然与现状有所落差。

本书以电子产品开发项目的生命周期为经,以嵌入式系统技术与观念为纬,是一本行文轻松流畅却不失严谨的技术书籍。嵌入式系统技术的开发瓶颈,往往是如何把嵌入式系统的设计重要观念与电子产品的硬件平台进行创意性的结合。全书通过项目经理与菜鸟工程师的问答方式,将嵌入式系统开发与项目管理的理念跃然于字里行间,传达重要观念与技巧于无形之中。这种风格在市面众多信息参考书籍中是极为少见的,对初学者可减少其学习的弯路,更快抓住重要的观念与学习的重点。对想迈入项目管理领域的技术人员,可更好地了解电子产品开发的生命周期与项目管理的技巧。对已有经验的项目经理,他山之石,可以攻玉,本书绝对会带给您许多改善项目运作的灵感。

读完此书,您会发现作者欲将多年从事嵌入式系统开发项目的经验一吐为快,我觉得这是工程师、项目经理、技术团队主管等不可不读的好书,推荐给您!前思科CISCO副总裁

美国Acopia Networks董事长推荐序 2

本书作者是我在资策会的同事,在他的职业生涯开始时我就认识他,并从管理层的角度看着他成长,至今已超过10年。他在研究所时的专长是对象导向设计与操作系统实作,这正好符合当时中国台湾省“经济部”嵌入式系统科技项目的需求,所以顺理成章被选入资策会服国防役。不出两年,他已是该团队最重要的支柱,除了专业技术外,其学习与解决问题的能力都令人印象深刻。

本书作者在资策会就职初期,是一个精力充沛、乐于接受挑战的工程师,从无到有,独力完成一个嵌入式操作系统。此后升任项目经理、指挥工程师,让该系统架构日趋完善并使其应用范围更为广泛,不但将该系统移植到不同的CPU与平台,并顺利地将技术转移到民间厂商,协助其产品上市。离开资策会后,本书作者仍然致力于嵌入式系统、消费电子产品的开发,以及跨国研发团队与项目的管理。随着接触过的软硬件平台越来越多,他逐渐领悟到嵌入式系统在多样性的外表下,也应该有个统一的理论或观念,就像本书中一直出现的那句话“一法通、万法通”一样。

本书作者在管理研发团队时非常重视教育训练,他很喜欢与资历较浅的工程师分享他的经验。在实际职场上这么热心的技术主管并不多,书中对菜鸟谆谆教诲、不藏私的“项目经理”、“系统老鸟”、“软件老鸟”等角色,正是他平常工作态度的最佳写照。我一直鼓励他著书立言,此来可以避免让更多刚进入这行的技术人员,在还不了解嵌入式系统开发及其项目管理的本质之前,就一头钻入某个特定CPU或平台的研究,到头来学了一堆“规定”,而忽略了真正的“学问”与“观念”。

我已详读本书各个章节,作者以轻松诙谐的行文,展示了嵌入式系统开发不可不知的技术细节与项目管理上重要的观念。本人虽已在嵌入式系统业界深耕多年,亦可从中获得许多启发,并对许多章节的内容不觉心生英雄所见略同之感。

对嵌入式系统软件工程师、技术团队主管、项目经理等嵌入式系统从业人员而言,本书内容皆是作者的实战经历,绝对是您不可错过的好书。台湾省信息工业策进会

网络多媒体研究所/WiMAX中心副主任序言

市面上电子产品琳琅满目,业界正在使用的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,笔者希望通过许多实例,让读者从中学到嵌入式系统项目管理的观念及真正实作的技巧。

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

本书风格稍异于一般的技术书籍,全书以一个完整的嵌入式系统开发项目为支架,通过菜鸟与项目经理及资深技术人员的对话,推导出实务上正确的观念。通过这种方式,读者会对这些观念与知识留下深刻的印象,而且是透彻的了解,学习效果当然比教条式的宣读来得更好!

对第一次读本书的读者,遵循以下的提示可收事半功倍之效。

① 项目经理的回答与菜鸟对讨论的总结往往是重要的观念所在,为避免读者忽略重点,本书会以粗体字表示。

② 对于较重要的概念,在章节的结尾处进行深入探讨。

③ 对于篇幅较长的章节,同样于结尾处条列出该章节的重点回顾。

④ 本书旨在传达嵌入式系统项目的观念,并不局限于特定的平台,对于书中的程序,读者应该先看粗体字的注释部分,了解程序的目的后,再看程序的细节。

⑤ 如果您对C语言不是那么熟悉,可以先略过书中的程序部分,不过您还是可以学到嵌入式系统开发项目的重要观念。章节简介

本书各个章节尽可能地保持独立,基本上是以嵌入式系统项目生命周期的各个阶段来区分的。全书的主轴为一个在电子产品开发领域中经验丰富的项目经理,与其团队中的研发主管们,带着刚毕业的菜鸟进行嵌入式系统开发的历程。嵌入式系统开发的观念与经验都融入在项目经理与菜鸟的问答之中,再加上许多实际工作上发生的案例,读者可对嵌入式系统开发实务有更透彻的认识。

本书共分12章,基本上是按照嵌入式系统开发项目的生命周期排序;除了第1、2章之外,其他章节基本上保持独立,读者可选择有兴趣的章节先看,书中在必须参考到其他章节的地方都会详加注明。但作者仍建议第一次还是从头读起为佳,就像嵌入式系统开发项目必须按部就班来一样,总不能设计阶段还没做完,就开始忙着实作吧!

第0章,系统、嵌入、硬件:主题为嵌入式系统概论,内容包含嵌入式系统的定义与特性,还介绍了几本值得一读的参考书籍,最后说明一位好的嵌入式系统从业人员应具备的基本职业技能。

第1章,嵌入式系统项目的生命周期(上)——激活与规划阶段:第1、2章介绍嵌入式系统开发项目的生命周期,读者会发现业界的实际状况与软件工程、项目管理教科书中确实存在着差异。本章的内容包含嵌入式系统开发项目简介、项目开始之前的规划评估,以及项目初期的规划工作,其中包括进程、规格、人力及成本规划等。

第2章,嵌入式系统项目的生命周期(下)——设计、执行与结案:描述嵌入式系统开发项目中的设计阶段、执行阶段与最后的结案阶段,其中对设计阶段有较深入的描述,包括产品规格、硬件设计、系统设计、测试计划设计以及风险评估等。

对项目管理较没兴趣者可先跳过第1、2章,或可先快速读过,待全书读完后再回头来看一次,应当会有更多的体会与收获。笔者在此要强调的是:千万不要认为自己只是个工程师就不必学习项目管理的观念,以台湾省业界的环境来说,很难有人可以做一辈子的工程师,如果想在职业生涯更上一层楼,除了弄清楚产品的开发流程外,具备项目经理的视野与职业技能也是相当重要的一件事。

第3章,震撼教育——第一个嵌入式系统:实际描述一个嵌入式系统的开发流程。虽然目的只是让硬件板子上的一个LED闪烁,但却已是一个具体的嵌入式系统了。本章包含开发嵌入式系统程序的步骤与注意事项,除此之外,对计算机系统的运行原理有深入的探讨。

第4章,嵌入式系统平台设计:所谓的嵌入式系统平台就是让电子产品的“应用程序”得以顺利开发的环境,它不只是软件或硬件的概念,而是一个稳定的环境,在这个环境下,负责应用程序开发的工程师可以将心力放在产品功能的实现,以及改善其品质与效能上。本章内容包含嵌入式系统平台的定义、系统架构设计、API与程序风格设计、嵌入式操作系统简介、source tree设计及程序风格典范等。

第5章,建构嵌入式系统开发环境:描述何谓嵌入式系统开发环境以及为什么要建构嵌入式系统开发环境。内容包含嵌入式系统开发工具(cross tool)简介、makefile与link script的观念与写法、何谓ROM maker、如何将程序下载到机器上并执行,以及版本控制server的重要性。最后举一个实际发生过的案例,说明建构所谓嵌入式系统开发环境的重要性。

第6章,上电之后——boot loader:描述机器上电后,如何让CPU可以正确执行到我们的程序,以及开机后系统该做的初始化动作。本章内容包括第一行程序如何被执行、基本硬件测试,以及如何加载程序段与初始化数据段等细节。本章最后提了一下目前最热的NAND Flash,描述了NAND Flash booting的工作原理及注意事项。

第7章,驱动程序:有些人会认为嵌入式系统开发几乎就是在进行驱动程序开发,这当然是错误的观念。驱动程序仅是嵌入式系统中的一环而已,但一般软件工程师总会对驱动程序开发怀着莫名的恐惧。本章首先陈述驱动程序开发并没想象中困难,接着描述驱动程序开发之前的准备工作,其他内容包括如何控制CPU、如何控制内存与其他IC、撰写中断处理程序的注意事项,以及如何为驱动程序除错。

第8章,内存管理:内存管理是嵌入式系统开发中相当重要的一环,本章的内容包括内存空间配置,stack与heap在嵌入式系统中的应用,最后提到可将程序或资料写入EEPROM或Flash的烧录器。

第9章,仿真器:嵌入式系统的开发环境通常十分昂贵,不可能给每位工程师都配上一套,再加上项目初期可能没有足够的硬件平台可供应用程序开发之用,所以在嵌入式系统中仿真器的功用是很大的。本章首先介绍何谓仿真器,接着说明emulator与simulator的差别,以及仿真器对嵌入式系统开发项目的贡献是什么,最后列举了许多如何在PC上仿真实体机器装置的实例。

第10章,系统整合:大部分的应用程序会先在仿真器上开发,而驱动程序与部分的系统功能则必须在真实机器上才能验证。当底层平台已趋稳定,就可逐一将应用程序移植到实体机器上执行。本章的内容包含进行第一次整合的最佳时间点、导致整合失败的原因、开发流程重新检讨,以及程序移植时的注意事项。整合完毕后就可以发行正式版本,在本章的最后则会提到bug管理系统。

第11章,testing、debugging和tuning:当程序交付测试后项目就进入了测试、除错与调整时期。本章包含测试、除错与调整三大主题,详细内容包括嵌入式系统的测试概论、bug的管理原则、debug基本技巧、如何进行系统效能的最佳化。

第12章,结案前的煎熬:介绍结案之前的工作项目,包含版本发行、介绍生产线专用的自动测试程序、如何决定量产版本、出货不等于结案的怪现象结案相关事宜等。

附录:附录中总共有4个主题:没有执行项目管理程序的开发案会有什么状况、解释何谓callback function、如何用C语言实现对象导向的观念,以及介绍一个效率极佳的画斜线算法。网站

作者为本书设立了一个专属的blog,可作为读者与作者沟通的平台,其内容除了对本书中既有主题的延伸与讨论外,还会陆陆续续加上未收录在本书中的实例,以及嵌入式系统开发的相关新知识等。网址为:

http://tw.myblog.yahoo.com/embedded_system_book

此外,有任何问题与指教,可以直接用以下方式联系,KME工作室当竭尽所能为读者服务。

service@kme-tw.com

ealin_chiu@gE-mail.com致谢

工作至今十多年,帮助与教导过我的人不知凡几,否则怎能累积经验以成本书?所有在我生活与工作中出现过的朋友,谢谢你们,是你们督促我学习与成长!还有目前KME工作室的伙伴们,谢谢你们,别忘了我们要共同实现的美好目标,那美好的旅程才正要展开!

笔者还要感谢的是我亲爱的老婆俞娜,在我埋首于工作与写作时,她无怨无悔地照顾好我的一家老小与一只狗一只猫,让我无后顾之忧地完成了这本书。

最后要感谢翻阅或购买这本书的读者,希望本书的内容对您有所助益。

Ealin Chiu于台北th

14 April 2009第0章 系统、嵌入、硬件

这是一个信息本科毕业生,从对嵌入式系统一知半解,成长为电子产品开发领域高手的故事。

刚从学校毕业的他,幸运地碰到一个不藏私且爱说教的项目经理,在一个个项目的磨练下,除了写程序和除错外,他做了许多他以前不认为软件工程师该做的事情,包括焊接、测量信号、看线路图、测试和客户或厂商用E-mail打笔仗……他甚至帮忙撰写产品规格书,也曾三更半夜进工厂去解决一点都不像软件bug的问题。

他自认为写程序的功力不差,逻辑观念强,专业科目成绩也都很好,但在项目的进行中,才惊讶地发现嵌入式系统或消费类电子产品的开发有太多他不知道的学问与技巧,更发现学校里教的东西居然大部分都派不上用场。

故事从他被一家有100多人的“信息电子公司”以“研发工程师”的职务录取开始,在此之前,他只知道他的工作内容是“消费类电子产品”或“嵌入式系统”的开发[1]。0.1 Welcome on board『Welcome on boat!欢迎加入我们团队,我希望你在正式报到之前,能先了解一下工作性质,如果可以的话,我想先帮你做一下职前训练。』『嗯,我会努力学习的!』新进工程师唯唯诺诺地回答。『你不用紧张,我先带你参观一下工作环境,介绍一下各个部门的成员。对了,我是这个研发团队的主管,我们目前负责日本一个大厂交付的电子产品开发,细节现在先不说。我需要一个助手,以后我就是你的老板,我会让你尽快上轨的。』

我们姑且称这个主管为项目经理,手下约有30名工程师,他总是在喊缺人,而老板认为他已经是公司中最大研发团队的主管了,公司提供的资源已经足够多了,但工程师每月加班工时居高不下却是不争的事实。

他总想起二战时德军的某个连队,在东线战场自莫斯科前线掩护其他部队撤退的故事。这个连长只剩下15个人,在零下二三十度的冬天,缺乏弹药的情况下,负责防守1公里的战线。面对的是苏军一个营的一次又一次的冲锋,因为布署得宜,节制弹药的使用,再加上士兵训练有素,居然也守了3天,让友军得以成功撤退到有利位置。

项目经理:『你知道这个连队最后怎么了吗?』他老是喜欢讲这个故事给新进同事听。『我很想知道!』看来菜鸟工程师对军事也很有兴趣。

项目经理:『全军覆没!能守住两天简直是奇迹了。但是你知道我为什么讲这个故事给你听吗?』

菜鸟:『……不知道,这和我的工作性质有关吗?』

项目经理:『当然有关!在中国台湾省,电子产品或嵌入式系统开发就是这样严酷的战场,研发团队没有足够的资源,却要承接越来越复杂的项目开发。我就是那个连长,你是其中一个小兵,每个人都要负责过长的战线,如果有必要,我也要拿起步枪和你们一起冲锋。』

菜鸟:『有这么可怕吗?』

项目经理苦笑:『别担心,那位连长只有15个人,至少我还有30人……』然而,这一行,却不乏奇迹的故事。0.2 嵌入式系统开发团队

菜鸟:『你的意思是说,我们的团队也是编制不全的?如果是这样,我们怎么还敢承接那个国际大厂的开发项目?』

项目经理:『刚刚说的是人力和资源的匮乏,我可没说我们团队编制不全。一般嵌入式系统研发团队都有很严谨、很漂亮的组织架构,但这不代表某个小组就会有合适且足够的人力配置。先不管团队中现有人力的多寡与素质,就以功能面来看,一个开发嵌入式系统的研发团队,至少应该有以下的小组

● project management——项目管理组;

● hardware——硬件组;

● software——软件组;

● system——系统组;

● application——应用程序组(AP);

● testing——测试组;

● supporting——支持组(美工、行政事务等)。』

菜鸟工程师:『除了硬件小组外,好像和课本上写的软件开发团队也差不了多少啊?』

项目经理:『但课本恐怕没跟你说有些team member的工作是跨组的吧!应该这样说,我们团队的状况是几乎没有人只会或只需要做某个小组的工作。例如,项目刚开始时,项目管理组会比较忙,此时几乎所有人都要帮忙评估规格、进度以及技术可行性。至于设计阶段则几乎是全员参与。当硬件工程师开始找零件、规划硬件架构时,在这个阶段,软件工程师必须和硬件工程师密切合作。同理,在项目的不同阶段,各有不同的人力瓶颈,前期时上层的人要帮底层的人,中期软件组的人要帮系统的人、系统的人要帮AP的人,后期则所有的人都要帮忙测试……』

菜鸟工程师:『一个人负责多件事情不是很容易造成混乱吗?这样工作效率会高吗?』

项目经理:『这也是没有办法的事,我们只能尽量做好时间与人力的配置。我们团队的组织表中每一个重要的工作项目都有对应的小组以及负责人,这些小主管必须对项目状态、风险管理及人力调配付出相当多的心力。我就只有这些人力,为了调配他们去追赶几乎无法达成的出货日期,我只好把每个人都当做全能在用。这并不是我们公司独有的现象,我想多才多艺[2]是业界对“优秀工程师”的基本要求吧。

但请注意,我可没说时间紧急时就可以草率地执行设计工作,人力短缺时就可以不写文件等!人少有人少的办法,刻意忽略设计与文件工作不但不能节省时间,更是项目失控或失败的主因,但是教科书上往往忽略了这个普遍存在的现实。』

菜鸟工程师:『你是说软件工程那套对嵌入式系统开发不适用了?』

项目经理:『你还是没搞懂,第一,我从来没有贬低软件工程或面向对象开发模式的意思,它们也都是经验和天才的累积,我的重点是软件工程教科书中并无法完全考虑所有的状况,偏偏这个状况又是业界普遍的现象。

第二,上述的现象并不只发生于嵌入式系统或电子产品开发中,我想一般的软件公司或游戏开发公司都有这种徒有漂亮的组织表,但人力永远是捉襟见肘的状况吧。』

菜鸟工程师:『我大概懂了,但我还是不知道嵌入式系统开发和一般软件开发有什么不同,我的工作内容到底是什么?还有,你会把我分到哪一组啊?』0.3 老调重弹——什么是嵌入式系统

项目经理:『别急,工作内容我会慢慢告诉你的。在此之前,你先说说你对嵌入式系统的了解,何谓嵌入式系统?』

菜鸟:『按照书上的定义,嵌入式系统是一种用于特定用途的计算机系统,例如汽车里的ABS刹车系统,就是一个小型的嵌入式系统,有一个CPU,执行着内存里的程序,不断地接收外界的输入,计算后输出结果。在ABS这个例子里,输入的是车轮的状况以及驾驶员踩下刹车的紧急程度,输出的则是对煞车器的控制。』

项目经理:『不错嘛,你的观念还蛮清楚的!有一本教科书是这么说的:嵌入式系统是计算机软件与硬件的综合体,亦可涵盖机器或其他的附属装置,这个综合体设计的目的在于满足某种特殊功能。

还有另一个定义也颇传神:以应用为中心、以计算机技术为基础,软硬件可裁剪,系统对功能、可靠性、成本、体积、耗电量和应用环境有特殊要求的专用计算机系统,是将应用程序、操作系统和计算机硬件集成在一起的系统。

IEEE定义为:嵌入式系统是用于控制、监视或者辅助操作的机器、设备或装置(原文为devices used to control,monitor or assist the operation of equipment,machinery or plants),其特性为:

● 通常执行特定功能;

● 内含嵌入式微处理器(CPU);

● 严格的时序和稳定性要求;

● 全自动操作循环。

中文维基百科的定义是:嵌入式系统是一种完全嵌入受控器件内部,为特定应用设计的专用计算机系统。与个人计算机这样的通用计算机系统不同,嵌入式系统通常执行的是带有特定要求的预先定义的任务。由于嵌入式系统只针对一项特殊的任务,设计人员能够对它进行最佳化,减小尺寸降低成本。由于嵌入式系统通常进行大量生产,所以单个产品节约的成本能够随着产量的增加进行成百上千倍地放大[3]。

我觉得这些定义都太绕舌,简单地说就是那句我们常听到的口号:软件加值硬件。请参考图0-1,一个CPU,加上不同的设备,再配合不同的系统与应用程序,就可以开发出完全不同用途的电子产品,这就是嵌入式系统。』图0-1 软件加值硬件

笔者比较喜欢的定义如下,嵌入式系统的特性都表现在粗体字上。

这些定义基本上是大同小异的,主要是范围上的差别,最大的范围可以包含硬件设计,甚至时下最流行的SOC(system on chip)都可以纳入嵌入式系统的范畴。但万流归宗,嵌入式系统的本质就是以下两点而已:

● 计算机系统;

● 特定应用。0.3.1 嵌入式系统本质(Ⅰ)——计算机系统

首先,嵌入式系统必然是一个计算机系统,计算机系统的定义如图0-2所示,由4个主要部分组成:

● CPU;

● 内存;

● 输入设备;

● 输出设备。图0-2 典型的计算机系统

无论个人计算机、超级计算机或任一嵌入式系统,至少有一个或一个以上的CPU,而CPU的计算能力根据其应用领域相差甚远。在一般PC的CPU运行速度已达3 GHz的今日,诸如8051、Z80、80186等历史悠久的CPU仍隐身在许多你我周围的产品内(如图0-3所示),更不用提一些在特定领域中大放异彩的CPU,恐怕一般读者连听都没听过。图0-3 8位CPU——8051

除了CPU之外,计算机系统的程序必须存储于内存之中。同样地,根据产品的特性,所使用内存大小与种类都大相径庭,而嵌入式系统内的内存使用更是一门学问,说穿了无非就是成本与效能的抉择,在许多应用中,成本的重要性出乎意外地占了上风[4]。本书会有专门的章节讨论内存。

计算机系统必定是为了解决某种特殊的问题而设计的,复杂的PC如此,嵌入式系统更是如此。解决问题的过程包含资料的输入与结果的输出。在嵌入式系统的领域中,除了处理资料的算法随产品应用领域而异之外,输入与输出的种类更是无奇不有,其中大部分直接涉及硬件的操作。例如,冷气恒温控制器的输入是来自检测温度的芯片,输出则是对冷气强弱的控制。这样的例子不胜枚举,有些产品可能没有明显的输入,但肯定要有某种形式的输出,否则就失去了制作这个产品的意义。

附带一提,随着IC代工业的兴起,IC设计公司也如雨后春笋般一间一间地成立。上述所谓的计算机系统几乎已可做到一个IC里面,如图0-4所示的虚线框起来的部分(没被完全框起来的方块表示内存区块、输入/输出设备可以整合到CPU内部,也可外挂在CPU外部)。对嵌入式系统开发者而言,硬件设计的复杂度与出问题的机会当然都会大幅度降低,但对软

件系统来说,所开发系统的基本原理与可能要面对的挑战则是完全一样的。图0-4 计算机系统0.3.2 嵌入式系统本质(Ⅱ)——特殊应用

再来谈到嵌入式系统的第二个本质——特殊应用,这一点可引申出嵌入式系统更多的本质。嵌入式系统应用范围非常广泛,从家里的微波炉、厕所的自动冲水系统、学生用的电子字典、汽车里的行车控制系统(见图0-5),到宇宙飞船的燃料控制及核电厂的监控系统等。在一个大系统中,往往包含很多小型的嵌入式系统,以个人计算机为例,键盘、光驱、显示器里都包含着一个计算机系统,CPU执行内存里的程序,处理着不同性质的输入,并输出不同性质的结果。图0-5(a)一台汽车内包含许多嵌入式系统图0-5(b)一台汽车内包含的各式各样的传感器应用

由于电子产品性质往往差异很大,嵌入式系统的开发很难有一套统一的标准,没有一个组织或学术单位可以规定嵌入式系统一定要用什么样的CPU,一定要使用什么语言开发,一定要用什么操作系统(有时候要不要用操作系统都还是个问题)。在这个领域中,许多教科书教我们要奉为“圣经”的准则逐渐模糊。读者可以这样思考:如果系统的应用与限制是不确定的,设计与开发的方法自然也无法一致。但重点是:无论开发什么电子产品,基本的开发技巧与观念都是一致的。

用个更为传神的说法:嵌入式系统的开发很像太极拳,需要的是观念、基本功及实战经验,拘泥于招式与规定只会做出一个四不像的产品。简单地说,在开始设计某个系统时,弄清楚产品的应用范围或详细规格是最重要的事情。产品规格会严重影响以下的设计:

● 开发流程规划;

● 资源调配;

● CPU的选择;

● 硬件的设计;

● 软件的架构;

● 测试计划;

● 生产流程等。

例如,汽车的ABS刹车控制器,可能使用运算能力一般的CPU就可以了,却必须有很复杂的测试计划;又如太阳能电子计算机,除了计算结果的正确性之外,成本及省电却是更重要的考虑因素。每个产品都可以说出它和其他产品的不同处,在此读者可以自己做个简单的练习,找一个你随手可得的电子产品,例如MP3随身听或智能型洗衣机,如果是要你来设计这个产品,最重要的考虑是什么?

项目经理:『我希望你能对嵌入式系统开发有正确的观念,试着训练自己对产品设计的敏锐度。我要你选10个你周围的电子产品,分别列出它们的输入与输出是什么并且以设计者的角度,列出设计这个产品时的重要考虑因素。以下是一些在产品设计阶段必须考虑的事情,你也可以试着思考还有哪些不在清单内的影响因素。』

● 成本;

● 外观;

● 预计销售市场与消费群体;

● CPU计算能力;

● 内存大小;

● 省电需求;

● 稳定度;

● 反应实时性(real time);

● 软件复杂度;

● 测试复杂度等。

项目经理:『正式报到那天交给我,这是你第一个任务,也是很好的职前训练。』0.3.3 什么是嵌入式系统

项目经理:『谈了那么多嵌入式系统的观念,问你一个问题,个人计算机算不算是嵌入式系统?』

菜鸟:『PC是个开放式系统,以Windows或Linux操作系统来说,它并不是专用于某种特定用途,使用者可以在上面执行任何程序,在某些时候,它可能是一台多媒体影音播放器,在另一个时候,它又像是一台上网机、打字机、游戏机,甚至电子计算机。因为个人计算机的通用特性,所以它应该不是嵌入式系统。』

项目经理:『其实我这个问题是有陷阱的,刚刚说过,PC里的键盘、显示卡等就是一个个嵌入式系统。我们只看主板就好了,当主板上电后,CPU执行的第一行程序是什么?存储在哪里?』

菜鸟:『这我知道,在操作系统激活之前,BIOS会先被执行,BIOS会去做self test的动作,检测硬件有没有问题。如果使用者有按下特殊键(如F2键)的话,就会进入BIOS的设定功能,否则就会到硬盘、光驱或USB设备的特定地址加载操作系统。至于BIOS存储在哪里我就不清楚了,但应该不在硬盘里才对。』

项目经理:『不错,概念很清晰。从前的BIOS是存储在mask ROM里面的,后来为了让使用者可以自己更新BIOS,现在的BIOS都是存储在可擦写的Flash里面。看一下主板(见图0-6),除了零件多一点外,它和一般电子产品的电路板有什么不同?主板加上CPU以及内存后,即使没有硬盘,BIOS也会被执行,而BIOS是有特定用途的程序,它负责侦测硬件以及加载硬盘里的操作系统,所以我说PC的主板就是一个嵌入式系统。』图0-6 没有硬盘的主板也可以算是一个嵌入式系统

项目经理:『举个简单的例子你会更容易了解。假设我能改写BIOS程序,我可以更改它的用途为当使用者按下某个键,就会从PC喇叭播放生日快乐歌,那么同样这块主板,就变成了特定用途的嵌入式系统。当然,不会有人会设计那么贵、计算能力那么强的硬件平台,只是为了播放一首歌。』

菜鸟工程师点头:『的确是很无聊的应用。』

项目经理:『如果我稍微改变一下应用你可能就不会觉得无聊了。你知道大部分的测量仪器,例如示波器,就是一片PC主板加上精确的测量设备,以及分析信号的程序组成的吗?你可以看一下这台逻辑分析仪,它开机时你甚至可以看到Windows执行的画面(见图0-7),因为它具有特定用途,我们也可以说它是嵌入式系统。此外你可以去研究一下工业用的PC,这类的产品除了特定用途、能在恶劣环境中运作、对稳定性要求甚高之外,就是一台PC,当然它是一种嵌入式系统,而且是很贵的嵌入式系统。再看如图0-8所示的公用电话,里面执行的是Windows XP,它当然也是一种嵌入式系统。』图0-7 逻辑分析仪——执行Windows的嵌入式系统图0-8 执行Windows XP的公用电话

菜鸟工程师:『我懂了,一个产品是否为嵌入式系统,和价格、大小、CPU计算能力,使用地点都无关,必须视其是否是为了特定用途量身订做的。』

项目经理:『没错,你要记住:其实某个产品是否符合嵌入式系统的定义并不重要,重要的是开发者必须完全了解嵌入式系统的本质,以避免在设计开发阶段做出错误的判断与决定。』

一般人总认为嵌入式系统应该是像手机这样的小机器,自然也不会认为用于PC的CPU可用来当做嵌入式系统的核心。

News:x86处理器抢进非PC类市场SoC化创造新蓝海■SoC化x86处理器,指将x86所有外部功能,都与处理器运算核心(core)一同封装;■ 已有相当多SoC化x86处理器,应用在IC读卡机、停车管理系统、电子式水电表、超市查价机、心电图设备、CNC控制、PLC、网络设备、终端机、交通信号与控制系统等领域。

x86 SoC(Ⅱ)■x86处理器具有CISC构架的缺点,需大量晶体管支援各种指令,以及高时钟,才能产生不错的效能,但是大量晶体管与高时钟却会带来高耗电· 因此,工业用SoC x86普遍利用架构简单、时钟不高的处理器;· 在大部分嵌入式系统的领域中,x86与RISC CPU比起来,几乎毫无优势;· 但在某些领域,造价与耗电等都不是问题。x86 SoC(Ⅲ)■ 为提高效能,会把x86架构下的CISC指令先解码成类似RISC指令,再利用各种方式同步处理、加速执行;■ 对x86架构下因有先天不良造成的浮点运算效能极限,也多利用指令集方式加以弥补;■ Windows上开发环境的便利性与现成的资源,对某些领域的产品开发商有极大的诱惑力。

老鸟再问菜鸟以下算不算是嵌入式系统:0.4 限制、限制、限制

项目经理:『这个group是我们软件组,你可以看到每个人桌上除了个人计算机外,有着各式各样的板子、仪器、文件和一堆不知名的电线;前阵子大老板让我要求所有工程师保持桌面的整齐,我马上和他报告这件事情比较难行。不同领域的同事有其自身的工作模式,身为管理者必须为其创造最能发挥工作效率的环境,而不应该妄加限制。』

菜鸟工程师:『好像负责软件的人数不是很多,但面试时你曾提过除了正在开发的产品外,我们已经开始设计下一代的硬件平台。我以为开发阶段应该会有许多问题需要解决,而新的硬件平台设计应该需要更多的人力,我们就这四五个人,够吗?』

项目经理:『确实不够,但这是我目前仅能挤出的人力,况且也不是每个人都适合做软件开发的。这样说吧,要不是不得已,任何一个军队的指挥官不会把一条1公里的战线交给只剩15人的连队防守;事实上,只有15人的连队根本就是不合理的存在,然而这是不得已的现实。』

菜鸟工程师:『老板知道这样的事吗?』

项目经理:『当然,其实老板正是始作俑者之一!哪一个老板不希望用最少的资源创造最大的价值?公司存在的主要目的是什么?不就是为了赢利吗?这就是我这个专业的项目经理存在的原因之一,嵌入式系统开发本来就是限制重重的,人力缺乏只是其中之一而已,而我的责任就是妥善统筹资源、人力与时间的分配。』

上一节说明了嵌入式系统的多样性,接下来我们从以下5个方面说明嵌入式系统的另一个特性——限制:

● 产品规格设计的限制;

● 人力分配的限制;

● 进度管理的限制;

● 硬件设计的限制;

● 软件系统设计的限制。0.4.1 产品规格设计的限制

嵌入式系统和一般软件项目有个显著的不同点,嵌入式系统完全用于电子产品,而电子产品的开发必然涉及制造成本以及硬件、机构与外观设计。也就是说软件并不是某件电子产品是否热销的唯一原因。

任何产品的开发计划都始于需求或创意,而电子产品的开发及创意的实现却往往为制造成本所限制。也就是说,制定电子产品规格时并须有所节制,不能天马行空地幻想,例如,要用国产车的造价设计出奔驰同等级的车款,无异是缘木求鱼。成本会影响规格,而规格则会影响与开发有关的所有工作。生产电子产品,本来就要在成本与规格上取得微妙的平衡。如果规格及制造成本都不愿让步,那就只能考验开发团队的能力[5]。

偏偏现实世界是大部分的客户或制定产品规格的同仁都高估了工程师的能力,明确地说,应该是高估了目前计算机科学的水平。在PC上某些很简单的事情,要在16位CPU,或少得可怜的内存的平台上实作时,需要的算法有时都可用来写论文了。

由于制造成本的考虑,电子产品在制定规格时便限制重重,而产品规格直接影响了运行其中嵌入式系统的开发。0.4.2 人力分配的限制

嵌入式系统开发并不一定都是复杂的项目,例如“电子宠物机”就是一个技术简单、成本低廉的产品,但其所牵涉的人力或技术种类肯定比一般软件项目要多,以下简单列出嵌入式系统开发流程不可或缺,但一般软件项目可能不需要的人力资源:

● 硬件设计工程师;

● PCB layout工程师;

● PCB制作协作厂商;

● 机构工程师;

● 模具制造协作厂商;

● 提供硬件零件(如CPU、设备IC、内存、LCD模块、电阻电容等)的厂商;

● 软件工程师;

● 硬件测试协助厂商;

● 硬件管理及验货人员;

● 工厂等。

即使只负责软件开发,也不可避免地要和其他单位合作或协调,如果软件工程师能稍具其他领域的知识与技能,对嵌入式系统的开发绝对是大有裨益的。但现实情况是要找到具备与其他领域人员沟通的热诚、管理协力厂商的能力、兼具程序设计之外技能的软件工程师确实很难。只能让工程师从工作中学习,等工程师好不容易渐入佳境了,却又要担心他跳槽,这是每一个管理嵌入式系统开发案的项目经理心中无法抹灭的痛!

嵌入式系统开发在人力资源上的限制不仅仅是项目人数的问题,主要是牵涉单位太多,而各单位有自己的文化及语言,管理的复杂度自然大增。若想把所有相关单位皆纳于同一公司或团队之内,或要求每位员工都必须多才多艺且可同时执行不同领域的工作,就显得不切实际且成本过高。

嵌入式系统不一定比一般软件项目复杂(其实有些电子产品的软件简单得出奇),也不一定需要更多或更高素质的人力,但“人”的管理,却是嵌入式系统项目能否顺利结案最重要的因素之一。0.4.3 进度管理的限制——测不准原理

嵌入式系统的流程(schedule)管理和人力管理面临着同样的问题与限制,即参与开发的单位通常很多,项目主管一方面要花时间精力协调各单位,以便精确控制流程;另一方面,某个任务的延误往往会影响其他单位的开发,特别当这个单位隶属于别家公司,甚至这家公司不在国内的话,不理性的争执、责任的推诿及语言与文化的隔阂,必然会让流程延误雪上加霜。

图0-9是个典型嵌入式系统的流程规划,读者可以发现很多任务是有前后关系的,而这些任务之间又往往属于不同的领域、牵涉到不同的公司。实际中,因为不确定性因素太多,流程几乎都是边做边修正的。

例如,硬件的延误会影响软件的开发,而驱动程序开发延误也可能影响硬件设计的验证。产品规格迟迟无法定案,则会打乱其他开发单位的步调。零件供货商供货出问题,则会直接影响生产,若到开发中后期,某零件无法供应,则直接受冲击的是硬件设计及软件工程师,流程势必延后。

而且嵌入式系统是软硬件整合的,除错较为困难,测试工作量也较大。在产品应用日渐复杂的情况下,偏偏电子产品的生命周期越来越短,为求尽快将产品推到市场,开发时间往往被压缩得很短。然而产品品质和上市时机(time to market)孰重孰轻没有一定的答案,这要视情况而定。所以嵌入式系统开发的流程管理需要考虑的事情非常多,要订出合理、且可满足品质与上市时间的开发流程几乎是件不可能的任务。图0-9 各单位协同作战的流程规划

身为项目经理,订流程时只能根据经验、知识与职业道德勉力为之。原则上项目进入执行阶段就不应该大幅度修改流程,但实际上频繁地更改流程却是业界的常事。其实项目流程并不是测不准,主要是嵌入式系统项目牵涉的变数太多,偏偏预定上市时间又太急,往往没做好完整的风险评估就贸然进入执行阶段,任何一件小事发生延迟,就可能对整个项目流程造成出乎意料的影响。0.4.4 硬件设计的限制

嵌入式系统的硬件设计也是限制重重,成本考虑是造成这些限制的主因,其他会影响硬件设计的原因包括:

① 产品规格与客户要求。产品规格直接影响硬件设计自不待言,而负责制定产品规格的客户常常有些特殊的要求,例如指定使用该集团子公司生产的零件,或要求硬件设计必须符合其原有产品的结构,尤其是某些有传统的国际大厂自有一堆标准,从键盘的反应时间、系统的耗电流、必须通过环境测试的种类,一直到零件采购公司的限制等。例如,通常这些大公司内部都有一份可采购零件的厂商清单,如果硬件设计者忽略了这个限制,到后期才发现就麻烦了。若一开始不弄清楚客户的要求,等到产品试产之后才发现问题一堆,除了影响流程外,还势必影响工程师的士气以及公司之间的合作气氛。

② CPU特性。CPU是电子产品的心脏,当CPU选定后,硬件设计才可随之展开。嵌入式系统使用的CPU往往名不见经传。例如,EPSON可不是只生产打印机,它们的半导体部门根据特定的应用领域设计了一系列的嵌入式CPU,该CPU内部整合了许多周边芯片,如SDRAM、LCD controller等,广泛地应用在诸如电子字典或电子书等产品上。除此之外,许多硬件产商为特定应用自行设计的ASIC[6]或SoC[7]更是不胜枚举。

CPU的特性与功能直接影响其他部分的硬件设计,举例来说,若CPU的GPIO(general purpose I/O,CPU中可用于一般用途的输出或输入引脚)不够,则势必要外加扩充I/O回路或芯片。假若CPU提供22诸如IC或IS等通信接口,硬件设计者就可以选用支持此接口的周边芯片,因为这些接口可以把多个芯片串在同一条总线上,不但控制简单,同样可以节省I/O引脚。此外,嵌入式系统领域里的CPU通常整合了许多其他周边IC,如此可减轻硬件设计的复杂度与工作量。

CPU的选择对产品开发有着决定性影响,选择CPU时必须在效能、单价及可用资源上取得平衡。基本上工程师不会奢望会有个效能远超过产品应用需求的CPU可用,这是嵌入式系统工程师的宿命!

③ 耗电:开发PC或网络程序几乎不需考虑系统耗电的问题,但在许多产品应用上,尽量延长使用时间却是重要的性能指标之一,手机是一个明显的例子。要延长产品的使用时间,软硬件都要配合,硬件设计上除了使用更长效的充电电池之外,还必须选用较省电的零件。为了在待机时可以尽可能地把没在动作的零件电源关闭,硬件设计时必须考虑到软件的需求,

例如选用CPU其中一个I/O引脚来当做某个零件的电源开关。

④ 产品大小及外观:结构设计也可能影响硬件设计。同样功能的硬件零件要“摆”在开发初期用的大板子(target board)与最终产品的小板子(real size board)上,就硬件设计而言,技术的困难度并不是在同一个等级上的!其中牵涉设计走线以及为了抗干扰所增加的硬件设计。

图0-10内的机器具有完全相同的电路设计,因为最终产品外观机构不同,其中一台机器必须分为两块板子,就硬件设计而言,其复杂度自然较高。图0-10 产品外观对设计的影响

⑤ 销售国家或地区:每个国家或区域对电子产品上市之前要通过的检查标准都不同,简单地说,同样类型的产品,销往某些非洲国家和销往美国、欧洲、日本等发达国家就可能用不同的硬件设计(这样说并没有轻视非洲国家的意思)。往往硬件设计为了提升一点性能必须付出极大的代价,例如CA认证标准要求产品的抗静电能力必须达到某个等级,但有些廉价的芯片抗静电能力就很差,要解决这个问题,就得加抗静电回路,否则只能更换芯片,除了成本增加外,也可能影响其他部分的硬件设计。

⑥ 工厂制造能力:这是一个常被项目经理或工程师忽略的因素。硬件工程师设计出来的东西,最终总要是可以生产的,但选中的工厂却不见得有生产这些产品的能力。工厂并不是只有组装而已,同样以手机为例来说,要验证生产线上手机半成品的通信功能需要昂贵的仪器,并不是每个工厂都能负担得起的。此外,有时选择零件还必须考虑工厂的库存,所以硬件设计初期,最好就能和工厂人员确认设计是否可行。例如这个产品要用到某个型号的Flash memory,在设计定案之前,应该先了解工厂是否支持该Flash的烧录器。0.4.5 软件系统设计的限制

嵌入式系统开发在软件上的限制是显而易见的,许多工作项目在一般软件开发项目上都是没有的,而本书大半的篇幅就是在详述这个事实。在此我们先列举如下:

● 不熟悉的硬件平台;

● 不熟悉的开发环境;

● 不易除错;

● CPU计算能力限制;

● 内存容量限制;

● 在不稳定的硬件平台上进行驱动程序开发;

● 电源管理程序;

● 工厂验证专用软件开发;

● 嵌入式操作系统开发;

● 仿真器开发;

● 软硬件整合测试;

● 稳定度与效能调整;

● code size调整等。

细节会在之后的章节陆续提到,本节仅用一个例子来说明嵌入式系统软件开发的“艰苦卓绝”。

在个人计算机CPU已进入64位、工作频率超过3 GHz、双核、内存容量至少512 MB的时代,请读者想想,您可以用8位、2 MHz的CPU来做什么?

答案之一是任天堂电视游戏器(红白机),虽然这已是老古董了,且效果当然比不上PS2[8],但当您知道它的CPU是8位、1.773447 MHz时,是否也对开发这个系统及许多脍炙人口的游戏的软件工程师怀有钦佩之意?这是个20多年前的产品,当时许多软件技术都不如现在发达,他们是怎么做到的?即便其下一代主机“超级任天堂”的CPU也仅仅是16位、3.68 MHz!

千万不要以为8位CPU的时代已经过了,据统计,微控制器厂商(MCU)在产品布局上是以8位微控制器为主力,其次为16位,主要锁定消费性应用市场。目前仍以8位微控制器的市场最大,单就最典型的8位8051微控制器而言,全球一年的出货量就高达33亿片。这个数量已经明显超过了对个人计算机CPU的需求!

这也是嵌入式系统软件工程师的宿命之一,他们的价值不在用过多少CPU,写过多少驱动程序,或开发过多少产品,而是在处处限制的情况下把产品开发出来,这意味着清晰的计算机系统概念、高效能的算法、良好的程序写作习惯及有效率的资源管理。

● Jim Turley在2001年嵌入式系统国际会议年会的报告中提到:据统计,PC的数量只占CPU总量的0.1%,而且直到可预见的未来,这个悬殊的比例不会有太大的改变。这就是嵌入式系统开发的业界现态——绝大部分的电子产品制造商,正使用名不见经传的CPU,开发出你我周围的各种电子产品。

● 软件,就像人的大脑一样,决定了硬件的操作模式。通过良好的操作系统及应用程序,把硬件功能发挥到极至。

● 硬件,如人的手、脚、神经等部位,决定了嵌入式系统的先天功能,如运算能力和I/O接口等。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载