嵌入式系统开发之道——菜鸟成长日志与项目经理的私房菜(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-11 18:12:27

点击下载

作者:邱毅凌著

出版社:信息技术第一出版分社

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

嵌入式系统开发之道——菜鸟成长日志与项目经理的私房菜

嵌入式系统开发之道——菜鸟成长日志与项目经理的私房菜试读:

延伸学习

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

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

若你有任何问题或指教,可以直接寄到以下Email Address,或在笔者的微博中留言,我当竭尽所能为你服务。

Email address:ealin.chiu@gmail.com

Facebook:ealin.chiu@gmail.com

Plurk:Big_Blackdog

Twitter:Big_Blackdog

致谢

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

我还要感谢的是我亲爱的老婆——俞娜。在我埋首于工作与写作时,她无怨无悔地照顾好我的一家老小,与一只狗、一只猫,让我毫无后顾之忧地写完这本书。当然,还要谢谢出版团队后期制作的细心与努力,你们的专业让这本书除了专业,更添质感!

最后感谢翻阅或购买这本书的你,希望本书的内容真的对你有所帮助。Ealin Chiu于台北2010年8月20日

前情提要

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

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

菜鸟:“其实我有点担心我的能力是否真能符合贵公司的职务需求。虽然我在学校修过微处理器实习,但对所谓的‘嵌入式系统’仅有粗略的概念,不仅汇编语言没写过几行,驱动程序也没碰过,电子学还被挂过一次,更不要说什么实际的经验了。还有,嵌入式系统的程序要怎么写?是现在热门的Google Android还是Windows Mobile平台?API手册可不可以先让我回家恶补啊?”

项目经理:“放轻松,别告诉我现在学校不教 C 语言了!操作系统、数据结构、算法及计算机组织都是必修的吧?希望你上这些课时不是在鬼混,其他实战必备的技能,等你进来后我们会慢慢教你。此外,我们有自己的软硬件架构,所有的API都是自己写的,要用到Windows或Linux那套的机会恐怕不多。”

菜鸟:“是喔!其实我对Java和网页程序比较熟,公司的开发项目会用到Java吗?”

项目经理:“恐怕不行,我们用的CPU执行时序只有24MHz,而且客户对产品性能要求相当严格,我想都没想过要跑Java。之前我们还用8051做产品,你要8 bit MCU跑Java VM是有点过分了!”

菜鸟:“什么?24 MHz?我的计算机都飙到 3.2 GHz 了,还双核心耶!这样的 CPU 能做什么?”

项目经理:“放轻松嘛,除了跑Windows 7外,可做的事情多了,我还没跟你说我们系统只有8 MB的SDRAM,至于那个8051项目用到多少内存,以后有空我再慢慢让你知道,现在不宜给你太大的惊吓。”

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

项目经理:“在 PC 上开发执行的电子辞典系统也许很简单,但在 24MHz 的 CPU、8 MB的SDRAM上,需要的技术可远超出你的想象!此外,日本厂商对高质量的严格要求,我想你也略有耳闻,不但要机器稳定、耗电量低,死机绝对是不可饶恕的罪过,在这样的前提下,需要的技术恐怕真的比你想象的还多。

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

菜鸟:“哇!我是学软件的耶……”

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

菜鸟:“好像有点懂了,似乎还蛮好玩的。请教一个私人的问题,现在智能手机好像很红,我对智能手机的开发还蛮有兴趣的,在贵公司有机会开发手机吗?”

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

菜鸟:“好像有点玄……”

项目经理:“如果你愿意加入我们,我会让你在一件件任务中学习。”

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

许多知识学校不会教、也无法教,因为那需要实际经验。就如同操作系统的教科书不会教你 Boot-Loader、Context-Switch 等实作一样,或软件工程的老师绝对不会讲授在人力缺乏的状况之下,如何去执行教科书中的那一套质量系统!

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

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

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

希望此书可起到抛砖引玉之效,让嵌入式系统培养教育更为扎实,并且让信息业更上一层楼。总之,这不是一本全都在讲述何谓嵌入式系统的书,更不是只教你在某个特定平台写程序的Programming Guide,笔者希望通过实例让你从本书中学到嵌入式系统项目管理的思维及真正实作的技巧。

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

章节简介

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

对第一次阅读本书的你,建议遵循以下提示,当可收到事半功倍之效。

■ 项目经理的回答与菜鸟对讨论的总结往往是重要的思想所在,为避免你忽略重点,书中会以粗体字表示(请注意,本书中使用PM缩写时都是代表“Project Manager,项目经理”的意思)。

■ 较重要的概念,在章节的结尾处会加以深入探讨。

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

■ 本书旨在传达嵌入式系统项目的思想,并不局限于特定平台。至于书中程序部分,你应该先看粗体字的注释,了解程序目的之后,再看程序的细节。

■ 如果对C语言不是那么熟悉,可以先略过书中的程序部份,你还是可以学到嵌入式系统开发项目的重要思想。

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

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

全书分为3个领域,分别如下。

嵌入式系统概论与开发流程

■ 第1章:系统·嵌入·硬件

■ 第3章:嵌入式系统开发项目生命周期:项目启动与规划

■ 第4章:嵌入式系统开发项目生命周期:设计、执行与结项

■ 第17章:系统整合

■ 第18章:Testing、Debugging与Tuning

■ 第19章:结项前的煎熬

■ 附录D:电子产品设计的最终依据:用户体验

项目管理与软件工程

■ 第2章:嵌入式项目管理

■ 第15章:项目进度追踪实务

■ 第16章:SoC设计公司中嵌入式系统团队的管理

■ 附录A:未执行项目管理的项目

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

嵌入式系统开发技术

■ 第5章:实作你的第一个嵌入式系统

■ 第6章:实作嵌入式系统平台

■ 第7章:构建良好的嵌入式系统开发环境

■ 第8章:上电之后:Boot Loader

■ 第9章:驱动程序

■ 第10章:设计硬件抽象层

■ 第11章:菜鸟当自强:软件工程师硬起来

■ 第12章:做好存储器管理

■ 第13章:存储器管理(II):NAND Flash 概论

■ 第14章:模拟器

■ 附录B:Callback Function

■ 附录C:用C来实作面向对象的概念

以下是各章节的简介。

■ 第1章:系统·嵌入·硬件

主题为嵌入式系统概论,内容包含嵌入式系统的定义与特性,还介绍了几本值得一读的参考书籍,最后说明一位优秀的嵌入式系统从业人员应具备的基本职能是什么。

■ 第2章:嵌入式项目管理

本章是一个完整的项目管理概论课程,利用讲解投影片教材的方式,阐述项目管理的重要思想,并逐一说明项目管理知识体系(PMP)中的流程与工具。

■ 第3章:嵌入式系统开发项目生命周期:项目启动与规划

第1、2章介绍嵌入式系统开发项目的生命周期,你将发现业界的实际情况与软件工程、项目管理教科书中确实存在着差异。每项产品开发项目都应该视作一个项目,并使用项目管理的思维与工具来管理。偏偏大部分项目经理都是由工程师升上来的,并未受过正式的项目管理培训,本章会花一些篇幅说明项目管理的重要思维。此外,本章内容还包含嵌入式系统开发项目简介、项目开始之前的规划评估以及项目初期的规划工作,其中包括进度、规格、人力及成本规划等。

■ 第4章:嵌入式系统开发项目生命周期:设计、执行与结项

描述嵌入式系统开发项目中的设计阶段、执行阶段与最后的结项阶段,其中对设计阶段有较深入的描述,包括产品规格、硬件设计、系统设计、测试计划设计及风险评估等。

■ 第5章:实作你的第一个嵌入式系统

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

■ 第6章:实作嵌入式系统平台

所谓的嵌入式系统平台就是让电子产品的应用程序得以顺利开发的环境,它不仅是软件或硬件的概念,还是一个稳定的环境。在这个环境下,负责应用程序开发的工程师,可以将心力放在产品功能的实现,以及改善其质量与性能上。本章内容包含嵌入式系统平台的定义、系统架构设计、API与程序风格设计、嵌入式操作系统简介、Source Tree设计以及程序风格典范等。此外,为了让你对系统架构有更深层的认识,本章还加入了SDK与Turn-Key Solution 概论,以及许多系统架构的案例分析。

■ 第7章:构建良好的嵌入式系统开发环境

描述何谓嵌入式系统开发环境,以及为什么要构建嵌入式系统开发环境,内容包含嵌入式系统开发工具(Cross-Tools)简介、Makefile 与Link Script 的思维与写法、何谓ROM Maker、如何将程序下载到机器上并执行,以及版本控制server 的重要性。最后,举一个实际发生过的案例,说明构建所谓嵌入式系统开发环境的重要性。

■ 第8章:上电之后:Boot Loader

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

■ 第9章:驱动程序

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

■ 第10章:设计硬件抽象层

业界通常认为硬件抽象层是个复杂且不容易实现的概念,其实这是一个谬误的说法。因为唯有系统架构中包含硬件抽象层,才可能满足嵌入式系统对可移植性的需求。本章将说明硬件抽象层的重要性、设计原则,以及实作时的注意事项。

■ 第11章:菜鸟当自强:软件工程师硬起来

负责嵌入式系统的软件工程师,必须对硬件的知识与技能有相当程度的了解。本章从软件工程师的需求出发,说明硬件设计流程、烙铁与测量仪器的使用原则。

■ 第12章:做好存储器管理

存储器管理是嵌入式系统开发中相当重要的一环,本章内容包括存储器空间配臵,以及Stack与Heap在嵌入式系统中的应用,最后提到可将程序或数据写入EEPROM或Flash的烧录器。

■ 第13章:存储器管理(Ⅱ):NAND Flash 概论

目前NAND Flash应用越来越普及,但NAND Flash却有着让系统设计者头大的特性——Bad Block。本章从系统开发的角度说明NAND Flash 特性、NAND Flash 控制Bad Block、ECC与平均写入机制(Wear-Leveling)。

■ 第14章:模拟器

嵌入式系统的开发环境通常十分昂贵,不可能给每位工程师都配上一套,再加上项目初期可能没有足够的硬件平台可供应用程序开发之用,由此可知,在嵌入式系统中模拟器的功能是很强大的。本章首先介绍何谓模拟器,接着说明 Emulator 与 Simulator的差别,以及模拟器对嵌入式系统开发项目的贡献。最后列举许多如何在 PC 上模拟实际机器装臵的实例。

■ 第15章:项目进度追踪实务

系统是否能如期完成,除了技术问题之外,最重要的,当然是项目能否被“妥善且正确”地管理。本章说明如何执行项目进度的追踪,以及介绍一组容易使用的项目管理,以及进度追踪的工具套件。

■ 第16章:SoC设计公司中嵌入式系统团队的管理

SoC设计公司中的SA(System Application)团队也是一个嵌入式系统开发团队,但却有着更为“艰苦”的处境。本章除了介绍 SA 团队的工作流程与管理方式之外,也花了不少篇幅说明Turnkey Solution 的特性。

■ 第17章:系统整合

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

■ 第18章:Testing、Debugging与Tuning

当程序交付测试后,项目就进入了测试、调试与调整时期。本章以测试、调试与调整3大主题,详细内容包括嵌入式系统的测试概论、静态测试原理与工具、bug的管理原则、debug基本技巧,以及如何进行系统性能、power与footprint的最佳化。

■ 第19章:结项前的煎熬

介绍结项之前的工作项目,包含版本发行、介绍生产线专用的自动测试程序、如何决定量产版本、出货不等于结项的怪现象,以及结项相关事宜等。最后对本书作一个简单的结语。

附录则共分为4大主题。

■ 附录A:没有执行项目管理程序的开发项目会有什么状况。

■ 附录B:解释何谓Callback Function。

■ 附录C:如何用C语言实现面向对象的思想。

■ 附录D:电子产品设计导论。说明电子产品设计不只是软硬件技术,唯有以用户体验为出发点,才可能设计出可被使用者接受的产品。  Chapter1系统·嵌入·硬件

本书主角及背景

这是一个信息本科毕业生,从对嵌入式系统一知半解,蜕变为电子产品开发领域高手的故事,文中简称为菜鸟。

刚从学校毕业的他,幸运地碰到一个不藏私且爱说教的项目经理,在一个个项目的磨练下,除了写程序和调试外,他做了许多之前认为软件工程师不该做的事情,包括焊接电路板、看原理图、使用仪器测信号、测试和客户或厂商用E-mail沟通等,甚至还帮忙编写产品规格书,也会三更半夜进工厂去处理一些并不像是软件bug的问题。

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

故事从他被一家约一百多人的信息电子公司以“研发工程师”的职务录取开始,在此之前,他只知道他的工作内容是“消费性电子产[1]品”与“嵌入式系统”的开发。01-01 Welcome on board!

这天是菜鸟工程师报到的第一天,他怀着忐忑不安的心情踏入公司。时间:01月10日地点:大会议室登场人物:菜鸟、项目经理(PM)

PM:“Welcome on Board!欢迎加入我们团队,我希望你在正式报到之前,能先了解一下工作性质。如果可以的话,我想先帮你做岗前培训。”

菜鸟:“嗯,我会努力学习的。”

PM:“你不用紧张,我先带你参观一下工作环境,介绍一下各个部门的成员。对了,本项目团队目前负责一个日本大客户交付的电子产品开发,我是这个项目的PM,也就是项目经理,我需要一个助手,以后我就是你的主管,我会让你尽快上轨道的。”

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

他总想起第二次世界大战时德军的某个连队,在莫斯科前线,掩护其他部队撤退的故事。这个连长只剩下15个人,在零下二三十度的冬天,缺乏弹药的情况下,负责防守一公里的战线,如图1-1所示。他们面对前苏军营级部队一次又一次的冲锋,他们因为部署得宜,节制弹药的使用,再加上士兵训练精良,居然守了3天,让友军得以成功撤退。

PM:“你知道这个连队最后怎样了吗?”他老是喜欢讲这个故事给新来员工听。

菜鸟:“我很想知道!”看来菜鸟工程师对军事也很有兴趣。

PM:“全军覆没!能守住3天简直是奇迹了。但是你知道我为什么说这个故事给你听吗?”

菜鸟:“不知道,这和我以后的工作有关吗?”

PM:“当然有关!和国际大厂比起来,像我们这样中小型的开发公司,电子产品或嵌入式系统开发就是这样严酷的战场,研发团队没有足够的资源,却要承接越来越复杂的开发项目。我就是那个连长,而你是其中一个小兵,每个人都要负责过长的战线。如果有必要,我也得拿起步枪和你们一起冲锋。”▲图1-1 残酷的战场

菜鸟:“有这么可怕吗?”

PM苦笑:“别担心,那位连长只有15个人,至少我还有30人……”

成功的以寡击众只是偶然的奇迹,绝对不会是常事,然而电子业这一行,在第一线人员严重熬夜操劳以及用聪明才智的努力下,却不乏奇迹的故事。01-02 嵌入式系统开发团队

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

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

■ Project Management:项目管理组

■ Hardware:硬件组

■ ID design & Mechanisms:产品外观与结构设计组

■ Embedded Software:软件组

□ Firmware:固件组

□ System:系统组

□ Application:应用程序组

■ Testing & QC/QA:测试与质量小组

■ Supporting:支持组(生产联系、美工、法务、行政事务等)”

菜鸟:“除了硬件与结构小组之外,基本上,好像和课本写的软件开发团队也相差无几吧?”

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

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

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

但请注意,我可不是说时间与人力吃紧时就允许草率地执行设计工作,人力短缺就可以不写文件!人少有人少的办法,无视设计与文件工作,不但不能节省时间,反而导致项目失控或失败,但教科书上往往无视这个普遍存在的现实。”

菜鸟:“你是说,软件工程那套对嵌入式系统开发不适用啰?”

PM:“你还是没搞懂。第一,我从来没有贬低软件工程或对象导向开发模式的意思,它们也都是经验和天才的累积。我的重点是软件工程教科书中无法完全考虑所有的现实状况,偏偏这个状况又是业界普遍的现象。第二,上述的现象并不只发生于嵌入式系统或电子产品开发,我想,一般的软件公司或游戏开发公司也有这种看似漂亮的组织表,但人力永远捉襟见肘的状况吧!”

菜鸟:“我大概懂了,但我还是不知道嵌入式系统开发和一般软件开发有何不同,我的工作内容到底是什么?还有,您会把我分配到哪一组啊?”01-03 老调重弹:何谓嵌入式系统?

PM:“别急!工作内容我会慢慢告诉你。在此之前,你先说说对嵌入式系统的了解,何谓嵌入式系统?”

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

PM:“不错嘛!你的概念还蛮清楚的!有一本教科书是这么说的:

嵌入式系统是计算机软件与硬件的综合体,也包括机器或其他的附属装置,而这个综合体设计的目的,在于满足某种特殊功能。

还有另一个定义也颇传神:

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

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

■ 通常执行特定功能

■ 内含嵌入式微处理器

■ 严格的时序和稳定性要求

■ 全自动操作循环

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

我觉得这些定义都太绕舌。简单地说,就是那句我们常听到的口号:软件加值硬件(通过软件,为硬件提高价值)。图1-2所示为一个CPU,加上不同的设备,再配合不同的系统与应用程序,就可以开发出完全不同用途的电子产品——这就是嵌入式系统。”▲图1-2 软件加值硬件

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

Embedded System use general or specialized purpose CPUs running custom software along with specialized hardware to perform applica-tion-specific functions.

基本上,这些定义大同小异,主要是范围的差别,最大的范围可以包含硬件设计,甚至时下最流行的SoC(System On Chip)都可以纳入嵌入式系统的范畴。但万变不离其宗,说穿了,嵌入式系统的本质就是以下两点而已。

■ 计算机系统

■ 特定应用

1-3-1 嵌入式系统本质(Ⅰ):计算机系统

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

■ CPU

■ 内存

■ 输入设备

■ 输出设备▲图1-3 典型的计算机系统

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

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

计算机系统必定是为了解决某种特殊的问题而设计,复杂的 PC 是如此,嵌入式系统更是如此。解决问题的过程包含数据的输入与结果的输出,在嵌入式系统的领域中,除了处理数据的算法随产品应用领域而不同之外,输入与输出的种类更是无奇不有,其中大部分直接牵涉了硬件的操作。举例来说,冷气恒温控制器的输入是来自检测温度的芯片,输出则是对冷气强弱的控制;Wii 的无线游戏杆,输入是来自使用者操作导致的方位变化或被按下的按钮,输出则是通过红外线将这些处理信息打包后送回Wii主机。这样的例子不胜枚举,有些产品可能没有明显的输入,但肯定要有某种形式的输出,否则就失去制作这个产品的意义了。

附带一提,随着 IC 代工业的兴起,IC 设计公司也如雨后春笋般一家家成立,上述所谓的计算机系统几乎已可做到一个IC里面,如图1-5虚线框起来的部分所示(没被完全框起来的方块表示内存、输入/输出设备可以整合到 CPU内部,也可外挂在CPU外部)。对电子产品开发者而言,硬件设计的复杂度与出问题的机会当然都会大幅度降低,但对软件系统来说,所开发系统的基本原理与可能要面对的挑战则是完全一致的。▲图1-5 包含在IC中的嵌入式系统

举例来说,图1-6所示的 IC 功能是将输入的字符串转为音频流并输出,这样的功能称为TTS(Text To Speech),可以看到这个IC的内部有CPU与内存(用以存储与执行TTS转换程序),并且有明确的输入(字符串)与输出(声音),根本就是一个不折不扣的嵌入式系统。▲图1-6 包含在IC里的嵌入式系统(TTS Engine)

1-3-2 嵌入式系统本质(Ⅱ):特殊应用

再来谈到嵌入式系统的第二个本质——特殊应用,这一点可引申出嵌入式系统更多的特质。嵌入式系统应用范围何其广大,从家里的微波炉、男厕的自动冲水系统、现在流行的游戏机、学生用的电子辞典、汽车里的行车控制系统(如图1-7和图1-8所示),到宇宙飞船的燃料控制、核电厂的监控系统等。在一个大系统中,往往包含很多小型的嵌入式系统,以个人计算机为例,键盘、光驱和显示器里都包含着一个计算机系统,CPU执行内存里的程序,处理着不同性质的输入,并输出不同性质的结果。▲图1-7 一台汽车内包含许多嵌入式系统且自成网络(1)▲图1-8 一台汽车内包含许多嵌入式系统且自成网络(2)

因为电子产品性质的各有不同,嵌入式系统的开发很难有一套统一的标准,没有一个国际标准组织或学术单位,规定嵌入式系统一定要用什么CPU、一定要使用什么程序语言开发、一定要用什么操作系统(有时候要不要用“操作系统”都还是个问题)、一定要用哪套开发工具,实际上,开发者并不需要因此而感觉无所适从,因为无论开发什么电子产品,基本的开发技巧与思想是一致的。

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

■ 开发进度规划

■ 预算与成本规划

■ 资源调配

■ CPU的选择

■ 硬件的设计

■ 软件的架构

■ 测试计划

■ 生产流程

举例来说,汽车的ABS刹车控制器,可能使用运算能力一般的CPU就可以了,但因为牵涉到人身安全,系统必须稳定且要求有严谨的测试计划,如太阳能电子计算机,除了计算结果的正确性之外,成本及省电却是更重要的考虑。每个产品都可以说出它和其他产品的不同处。在此不妨做个简单的练习,找一个你随手可得的电子产品,如MP3随身听或智能型洗衣机,如果是你来设计这个产品,最重要的考虑是什么?

实际上,许多项目都是在规格尚未确定的状态下就开工,这就如同只知道客户要你做一辆车,但却不知要做牛车、马车还是汽车;或者即使知道要做汽车,却又不知道客户要你做双B跑车、国产房车、还是火柴盒小汽车等。听起来很荒谬,但这种闹剧却在业界不时上演。

PM:“我希望你能对嵌入式系统开发有正确的概念,试着训练自

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

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载