1、 C/C+嵌入式系统编程嵌入式系统编程 Micbael Barr 著著 于志宏于志宏 译译 作者简介作者简介 Michael Barr 是是 Netrino 公司(一个嵌入式系统共享软件和软件工程服务提供商)的创始人兼总裁。公司(一个嵌入式系统共享软件和软件工程服务提供商)的创始人兼总裁。Netrino 公司鼓励所有职员通过为杂志撰稿和在业界会议 演 讲 来 分 享 自 己 的 专 业 知 识。这 些 资 料 可 以 在 公 司 的 网 站公司鼓励所有职员通过为杂志撰稿和在业界会议 演 讲 来 分 享 自 己 的 专 业 知 识。这 些 资 料 可 以 在 公 司 的 网 站http:/ 找到
2、。找到。Michael 拥有马里兰大学的电机工程学士和硕士学位。他的大部分时间都用在嵌入式软件、设备驱动和实时操作系统的开发上了。他还喜欢写作、教书,并期待着开始下一部著作的创作。目前他有好几个计划,其中包括一部小说。拥有马里兰大学的电机工程学士和硕士学位。他的大部分时间都用在嵌入式软件、设备驱动和实时操作系统的开发上了。他还喜欢写作、教书,并期待着开始下一部著作的创作。目前他有好几个计划,其中包括一部小说。前言前言 首先需要弄清楚,你为什么希望你的学生学习某个主题,首先需要弄清楚,你为什么希望你的学生学习某个主题,以及你希望他们学到什么,那么一般来说,以及你希望他们学到什么,那么一般来说,你
3、授课的方法或多或少就有了。你授课的方法或多或少就有了。Richard Feynman 今天,几乎所有电子设备里面部包含了嵌人式的软件系统。这些软件隐藏在我们的手表里、录像机里、蜂窝电话里,甚至可能在烤面包机里面。军事上会使用嵌入式软件来引导导弹。侦测敌方的飞行物。外太空探测器和许多医疗仪器离开嵌人式软件几乎不可能工作。今天,几乎所有电子设备里面部包含了嵌人式的软件系统。这些软件隐藏在我们的手表里、录像机里、蜂窝电话里,甚至可能在烤面包机里面。军事上会使用嵌入式软件来引导导弹。侦测敌方的飞行物。外太空探测器和许多医疗仪器离开嵌人式软件几乎不可能工作。设计人员不得不写所有的代码,实际上,成千上万的
4、电子工程师设计人员不得不写所有的代码,实际上,成千上万的电子工程师 计算机科学家和其他专业人员正在这样做。我也是其中的一员,从我的个人经验来说,我很清楚掌握这门技术是多么的困难。学校军从未开设有关嵌入式系统的课程。而我也没能从哪个图书馆里找到一本有关这个题目的像样的书。计算机科学家和其他专业人员正在这样做。我也是其中的一员,从我的个人经验来说,我很清楚掌握这门技术是多么的困难。学校军从未开设有关嵌入式系统的课程。而我也没能从哪个图书馆里找到一本有关这个题目的像样的书。每一个嵌入式系统都是独特的,其硬件部分对它的应用目标来说是高度专用的。这就导致了嵌入式系统编程的涉及面很广,而且可能会需要很多年
5、才能掌握它。不过,几乎所有的嵌入式软件开发都使用了每一个嵌入式系统都是独特的,其硬件部分对它的应用目标来说是高度专用的。这就导致了嵌入式系统编程的涉及面很广,而且可能会需要很多年才能掌握它。不过,几乎所有的嵌入式软件开发都使用了 C 语言。这本书就是要教你怎样在嵌入式系统中使用语言。这本书就是要教你怎样在嵌入式系统中使用 C 和和 C 的派生语言,的派生语言,C+。即使你已经知道如问编写嵌入式软件,你还是可以从这本书里学到很多东西。除了了解如何更有效地使用即使你已经知道如问编写嵌入式软件,你还是可以从这本书里学到很多东西。除了了解如何更有效地使用 C 和和 C+你还将会从本书中对常见的嵌人式软
6、件问题的详细解释,并从本书所提供的源代码中得到益处。本书中包含的高级主题有存储器检测和验证、设备驱动程序的设计和实现实时操作系统的内部机理,还有代码优化技术。你还将会从本书中对常见的嵌人式软件问题的详细解释,并从本书所提供的源代码中得到益处。本书中包含的高级主题有存储器检测和验证、设备驱动程序的设计和实现实时操作系统的内部机理,还有代码优化技术。我为什么写这本书我为什么写这本书 我曾经听到一个统计数字,在美国,平均下来大概每个人拥有八个微处理器。我当时很惊讶,怎么可能呢?难道我们周围真的有这么多计算机吗?后来当我有更多时间来想这个问题的时候,我开始把我用过的并且可能含有一个微处理器的东西逐一列
7、出来。短短三分钟内,我的清单已经包含了十样物品了我曾经听到一个统计数字,在美国,平均下来大概每个人拥有八个微处理器。我当时很惊讶,怎么可能呢?难道我们周围真的有这么多计算机吗?后来当我有更多时间来想这个问题的时候,我开始把我用过的并且可能含有一个微处理器的东西逐一列出来。短短三分钟内,我的清单已经包含了十样物品了 它们是:电视机、录音机、咖啡机、报时闹钟、录像机、微波炉、洗碗机、遥控器、烤面包机、还有数字式手表。这还只是我的个人物品我很快就可以拿出我工作中用到的另外十样东西。它们是:电视机、录音机、咖啡机、报时闹钟、录像机、微波炉、洗碗机、遥控器、烤面包机、还有数字式手表。这还只是我的个人物品
8、我很快就可以拿出我工作中用到的另外十样东西。进一步的发现是很自然的。那些产品里的每一个都不仅仅包含一个处理器。还有软件在里面。最终,我知道在我一生里我想做些什么了。我希望能用我的编程技能来开发这种嵌入式的什算机系统。但是我如问能得到必要的知识呢?当时我正在该大学的最后一年,而学校里迄今为止没有关干嵌入式系统编程的课程。进一步的发现是很自然的。那些产品里的每一个都不仅仅包含一个处理器。还有软件在里面。最终,我知道在我一生里我想做些什么了。我希望能用我的编程技能来开发这种嵌入式的什算机系统。但是我如问能得到必要的知识呢?当时我正在该大学的最后一年,而学校里迄今为止没有关干嵌入式系统编程的课程。幸运
9、的是、虽然我那时还处在学习的过程中幸运的是、虽然我那时还处在学习的过程中 但当我毕业的时候我还是找到了一家公司,从事编写嵌人式软件的工作。不过在这里我必须要靠自己的努力,因为为数不多的了解嵌人式软件的几个人通常都非常的忙,以至于很少有时间来解答我的问题,所以找到处找能给我教益的书、最后。才发现我必须自学所有的东西因为我从没有找到这么一本书,并且我很奇怪为什么会没有人来写这么一本书。但当我毕业的时候我还是找到了一家公司,从事编写嵌人式软件的工作。不过在这里我必须要靠自己的努力,因为为数不多的了解嵌人式软件的几个人通常都非常的忙,以至于很少有时间来解答我的问题,所以找到处找能给我教益的书、最后。才
10、发现我必须自学所有的东西因为我从没有找到这么一本书,并且我很奇怪为什么会没有人来写这么一本书。现在我决定自己来写这样一本书了。在此过程中现在我决定自己来写这样一本书了。在此过程中 我也发现了为什么以前没有人做这件事。关于这个题目最困难的是,决定什么时候可以收笔封稿了。每一个嵌八式系统都是独一无二的,并且就我所知,每一条法则同时都会存在例外倩况。不过,我已经尝试着提取出这个主题的本质的东西,并且仅仅讲述嵌人式系统程序员们必须要了解的那些部分。我也发现了为什么以前没有人做这件事。关于这个题目最困难的是,决定什么时候可以收笔封稿了。每一个嵌八式系统都是独一无二的,并且就我所知,每一条法则同时都会存在
11、例外倩况。不过,我已经尝试着提取出这个主题的本质的东西,并且仅仅讲述嵌人式系统程序员们必须要了解的那些部分。面向的读者面向的读者 这是一本关于使用这是一本关于使用 C 和和 C+来进行嵌人式系统编程的书。同样,这里假定读者已经有了一些编程经验,并且至少熟悉这两种语言的语法。如果你比较熟来进行嵌人式系统编程的书。同样,这里假定读者已经有了一些编程经验,并且至少熟悉这两种语言的语法。如果你比较熟悉基本的数据结构例如链表等,也会有些帮助。这本书并不要求你在计算机硬件方面了解很多,但是希望你愿意由这本书而学一点有关硬件的知识。这毕竟是一个嵌入式程序员工作的一部分。悉基本的数据结构例如链表等,也会有些帮
12、助。这本书并不要求你在计算机硬件方面了解很多,但是希望你愿意由这本书而学一点有关硬件的知识。这毕竟是一个嵌入式程序员工作的一部分。写这本书的时候,在我的脑海里有两类读者。第一类是初学者正像我刚从大学毕业的时候那样。她会何一些计算机科学或工程的背景,并有几年编程经验。初学者感兴趣的是如何为一个既有的设备写嵌人式程序,却不能肯定该如问着手去做。看完前五章后,她就能够用她的编程技术来开发简单的嵌入式程序了。本书的其他部分可以作为她在以后的职业生涯里遇到更高级的主题时的参考。写这本书的时候,在我的脑海里有两类读者。第一类是初学者正像我刚从大学毕业的时候那样。她会何一些计算机科学或工程的背景,并有几年编
13、程经验。初学者感兴趣的是如何为一个既有的设备写嵌人式程序,却不能肯定该如问着手去做。看完前五章后,她就能够用她的编程技术来开发简单的嵌入式程序了。本书的其他部分可以作为她在以后的职业生涯里遇到更高级的主题时的参考。第二类读者已经是嵌入式系统程序员了。她熟悉嵌入式硬件,并目知道怎样来为此编写软件。但是她正在寻找一本参考书来解释一些关键问题。出许这位嵌入式系统用序员一直在用汇编语言编程,并且刚接触第二类读者已经是嵌入式系统程序员了。她熟悉嵌入式硬件,并目知道怎样来为此编写软件。但是她正在寻找一本参考书来解释一些关键问题。出许这位嵌入式系统用序员一直在用汇编语言编程,并且刚接触 C 和和 C+不久。
14、这样的话,这本书会教给她如问在嵌入式系统里使用这些语言。后面的章节还会提供她所需要的更高级的材料。不久。这样的话,这本书会教给她如问在嵌入式系统里使用这些语言。后面的章节还会提供她所需要的更高级的材料。不论你是否属丁上述两种读者之一,我还是希望这本书能够以一种友好和方便的形式给你一些帮助。不论你是否属丁上述两种读者之一,我还是希望这本书能够以一种友好和方便的形式给你一些帮助。本书的组织本书的组织 本书包括十章、一个俘虏、一个词汇表,还有一个带注释的参考书目列表。这十章恰好可以分为两个部分。第一部分包含第一到第五章,主要面向嵌人式系统的初学者。这些章节应该按照它们出现的次序完整地读一下,这将快速
15、地带给你有关嵌入式软件开发的基础知识。结束了第五章之后本书包括十章、一个俘虏、一个词汇表,还有一个带注释的参考书目列表。这十章恰好可以分为两个部分。第一部分包含第一到第五章,主要面向嵌人式系统的初学者。这些章节应该按照它们出现的次序完整地读一下,这将快速地带给你有关嵌入式软件开发的基础知识。结束了第五章之后 你就可以独立开发一些小的嵌入式软件了。你就可以独立开发一些小的嵌入式软件了。第二部分包括第六到第十章,讨论了不论有没有经验的嵌入式程序员都很感兴趣的一些高级主题。这些章节基本上各自独立,可以按照随意的次序来读。另外,第六到第九章包含的示例程序可能会对你将来的嵌人式系统项目有所帮助。第二部分
16、包括第六到第十章,讨论了不论有没有经验的嵌入式程序员都很感兴趣的一些高级主题。这些章节基本上各自独立,可以按照随意的次序来读。另外,第六到第九章包含的示例程序可能会对你将来的嵌人式系统项目有所帮助。?第一章“引言”。介绍嵌入式系统。其中定义了若干术语,给出了一些例子并且说明了为什么选择第一章“引言”。介绍嵌入式系统。其中定义了若干术语,给出了一些例子并且说明了为什么选择 C 和和 C+来作为本书的编程语言。来作为本书的编程语言。?第二章“你的第一个嵌人式程序”。引导你尝试用第二章“你的第一个嵌人式程序”。引导你尝试用 C 语言编写一个简单的嵌语言编写一个简单的嵌 入式程序的全过程。这比较类似于
17、其他很多编程书籍里的“入式程序的全过程。这比较类似于其他很多编程书籍里的“Hello,World”的例子。”的例子。?第三章“编译、链接和定址”。介绍了一些软件工具。你将用它们来为一个嵌人式处理器生成可执行文件。第三章“编译、链接和定址”。介绍了一些软件工具。你将用它们来为一个嵌人式处理器生成可执行文件。?第四章“下载和调试”。介绍将可执行程序调人一个嵌入式系统的各种技术手段,同时也描述了你可以使用的调试工具和技术。第四章“下载和调试”。介绍将可执行程序调人一个嵌入式系统的各种技术手段,同时也描述了你可以使用的调试工具和技术。?第五章“接触硬件”。描述了学习一个不熟悉的硬件平台的简单过程。结束
18、本章后,你已经能够书写和调试简单的嵌人式程序了。第五章“接触硬件”。描述了学习一个不熟悉的硬件平台的简单过程。结束本章后,你已经能够书写和调试简单的嵌人式程序了。?第六章“存储器”。讲解了关于嵌人式系统内的存储器作所需要知道的全部知识。这一章还包括了存储器测试和闪速存储器驱动程序的源代码实现。第六章“存储器”。讲解了关于嵌人式系统内的存储器作所需要知道的全部知识。这一章还包括了存储器测试和闪速存储器驱动程序的源代码实现。?第七章“外围设备”。说明了设备驱动程序的设计和实现技术,同时包含了一个通用外围设备(定时器)的示范驱动程序。第七章“外围设备”。说明了设备驱动程序的设计和实现技术,同时包含了
19、一个通用外围设备(定时器)的示范驱动程序。?第八章“操作系统”。包含了一个可以用在任何嵌入式系统中的很简单的操作系统。这有助于你决定你是否需要这么一个操作系统,如果需要的话,是买一个还是干脆自己写一个。第八章“操作系统”。包含了一个可以用在任何嵌入式系统中的很简单的操作系统。这有助于你决定你是否需要这么一个操作系统,如果需要的话,是买一个还是干脆自己写一个。?第九章“合成一个整体。进一步拓展前面章节学到的关于设备驱动程序和操作系统的知识。本章讲解了如何控制更复杂的外设,同时引入了一个完整的示范应用来把你学过的东西综合到一起。第九章“合成一个整体。进一步拓展前面章节学到的关于设备驱动程序和操作系
20、统的知识。本章讲解了如何控制更复杂的外设,同时引入了一个完整的示范应用来把你学过的东西综合到一起。?第十章“优化你的代码”。描述了如何在增加代码运行速度的同时,减少你的嵌入式软件对存储器的需求。这包括使用一些技巧来刊用最有效的第十章“优化你的代码”。描述了如何在增加代码运行速度的同时,减少你的嵌入式软件对存储器的需求。这包括使用一些技巧来刊用最有效的 C+特性,而不导致显著的性能损失。特性,而不导致显著的性能损失。在整本书里,我一直在努力在特定的例子和通用的知识之间保持平衡,也就是尽可能地消除微小的细节,使这本书更加易读。像我一样,通过阅读示例你会从这本书里得到最大的收获,但是应该只把它们作为
21、理解重要概念的工具。记住不要的在任问一个电路板或芯片的细节里面。在理解了全面的概念以后,你将能够把它应用在你所碰到的任何嵌人式系统中。在整本书里,我一直在努力在特定的例子和通用的知识之间保持平衡,也就是尽可能地消除微小的细节,使这本书更加易读。像我一样,通过阅读示例你会从这本书里得到最大的收获,但是应该只把它们作为理解重要概念的工具。记住不要的在任问一个电路板或芯片的细节里面。在理解了全面的概念以后,你将能够把它应用在你所碰到的任何嵌人式系统中。在排版和其他方面的约定在排版和其他方面的约定 本书使用了如下的一些印刷约定:本书使用了如下的一些印刷约定:斜体斜体italic 当文件、函数、程序、方
22、法、例程和选项出现在段落中的时候,用来表示它们的名宇。斜体也用来强调或引人新的术语。当文件、函数、程序、方法、例程和选项出现在段落中的时候,用来表示它们的名宇。斜体也用来强调或引人新的术语。等宽等宽(constant width)用来显示文件的内容和命令的输出。在段落体中这种字体用来表示关键字、变量名、类、对象、参数和其他代码片断。用来显示文件的内容和命令的输出。在段落体中这种字体用来表示关键字、变量名、类、对象、参数和其他代码片断。等宽祖体等宽祖体(constant width bold)用来在示例里表示你输人的命令和选项。用来在示例里表示你输人的命令和选项。其他约定是和性别与角色有关的。关
23、于性别,我有意在全书区分使用了“他”和“她”。“他”代表奇数章节而“她”代表偶数章节。其他约定是和性别与角色有关的。关于性别,我有意在全书区分使用了“他”和“她”。“他”代表奇数章节而“她”代表偶数章节。关于角色我偶尔会在我的讨论中区对一下硬件工程师、嵌人式软件工程师和应用程序员的不同任务。但是这些称谓只是工程师个体的角色,需要注意到的是一个人充当多个角色是常有的事。关于角色我偶尔会在我的讨论中区对一下硬件工程师、嵌人式软件工程师和应用程序员的不同任务。但是这些称谓只是工程师个体的角色,需要注意到的是一个人充当多个角色是常有的事。在线取得示例在线取得示例 这本书包含很多示例源计码,除了最小的单
24、行代码以外都可以在线获得。这些示例按照章节来组织、并包含了这本书包含很多示例源计码,除了最小的单行代码以外都可以在线获得。这些示例按照章节来组织、并包含了 build 指令(指令(makefile)来帮助你重建每个可执行文件、完整的文件可以通过)来帮助你重建每个可执行文件、完整的文件可以通过 FTP 得到,在得到,在 ftp:/ 我们已尽全力保证本书内容的正确性,但你仍可能发现有些内容不对(甚至可能是我们出了错误!)。你的建议将帮助我们使下一版更加完美,请告诉我们你找到的错误以及你的建议,写信到:我们已尽全力保证本书内容的正确性,但你仍可能发现有些内容不对(甚至可能是我们出了错误!)。你的建议
25、将帮助我们使下一版更加完美,请告诉我们你找到的错误以及你的建议,写信到:美国:美国:OReilly&Associates,Inc.101 Morris Street Sebastopol.CA 95472 中国:中国:100080 北京市海淀区知春路北京市海淀区知春路 49 号希格玛公寓号希格玛公寓 B 座座 809 室室 奥莱理软件(北京)有限公司奥莱理软件(北京)有限公司 询问技术问题或对本书的评论,请发电子邮件到:询问技术问题或对本书的评论,请发电子邮件到: 最后,你可以在最后,你可以在 WWW 找到我们:找到我们:http:/ http:/ 个人说明和致谢个人说明和致谢 我曾经很想写一
26、两本书,但是现在我这么做了以后,我必须承认我开始的时候非常的天真。我甚至不知道要做多少工作、另外还会有多少人被牵扯进来。不过令我吃惊的是,找一个愿意出版我的书的出版社是如此容易,我原以为这会是很困难的一件事。我曾经很想写一两本书,但是现在我这么做了以后,我必须承认我开始的时候非常的天真。我甚至不知道要做多少工作、另外还会有多少人被牵扯进来。不过令我吃惊的是,找一个愿意出版我的书的出版社是如此容易,我原以为这会是很困难的一件事。从提议写书到出版,这个计划花了两年才完成。这是因为我一直在全时工作并且希望尽可能保持我的社会生活所致。要是我早知道我会熬夜到很晚来为最后的底稿而苦恼的话,我也许会放弃我的
27、工作来早点交付这本书。但过继续工作对这本书很有好处(同时对我的银行账户也有好处)。这使我有机会对以和很多嵌入式硬件和软件的专家进行广泛的讨论他们巾的很多人通过审阅部分成全部从提议写书到出版,这个计划花了两年才完成。这是因为我一直在全时工作并且希望尽可能保持我的社会生活所致。要是我早知道我会熬夜到很晚来为最后的底稿而苦恼的话,我也许会放弃我的工作来早点交付这本书。但过继续工作对这本书很有好处(同时对我的银行账户也有好处)。这使我有机会对以和很多嵌入式硬件和软件的专家进行广泛的讨论他们巾的很多人通过审阅部分成全部的书稿为这本书做出了直接的贡献。的书稿为这本书做出了直接的贡献。我非常感或以下诸位,与
28、我分享了他们的知识并且一直在帮助我的工作:我非常感或以下诸位,与我分享了他们的知识并且一直在帮助我的工作:Tony Bennet、Paul Cabler(和其他来自(和其他来自 Arcom 的很棒的人们),的很棒的人们),Mike Corish、Kevin DSouza、Don Davis、Steve Edwards、Mike Ficco、Barbara Flanngan、Jack Ganssle、Stephen Harpster(他在看完早期书稿后管我叫“断句王”)、(他在看完早期书稿后管我叫“断句王”)、Jonathan Harris、Jim Jesen、Mark Kohler、Andy
29、Kollegger、Jeff Mallory、Ian Miller、Henry Neugauss、Chris Schanck、Brian Silverman、John Snyder、Jason Steinhorn(正是他的流畅的语法素养和技术批评的眼光使这个书值得一读)、(正是他的流畅的语法素养和技术批评的眼光使这个书值得一读)、Ian Taylar、Lindsey Wereen、Jeff Whipple 和和 Greg Young。我还要感谢我的编辑我还要感谢我的编辑 Andy Oram。要是没有对我最初建议的巨大热情、超乎寻常的耐心和持续的鼓励,这本书将永远不会完成。要是没有对我最初建议的
30、巨大热情、超乎寻常的耐心和持续的鼓励,这本书将永远不会完成。最后,我要感谢最后,我要感谢 Apla Dharla,感谢她在这个漫长的过程中给予我的支持和鼓励。,感谢她在这个漫长的过程中给予我的支持和鼓励。Michael Barr 第一章第一章 引言引言 我想全世界计算机市场也许会有五台。我想全世界计算机市场也许会有五台。Thomas Watson(托马斯沃森),(托马斯沃森),IBM公司主席,公司主席,1943 没有人会想在家里放一台计算机。没有人会想在家里放一台计算机。Ken Olson(肯奥尔森),(肯奥尔森),DEC公司总裁,公司总裁,1977 最近几十年里最令人惊讶的事,莫过于计算机逐
31、渐占据了人类生活的主要地位。今天在我们的家里和办公室里,计算机的数量要比使用它们来生活和工作的人还要多,只是这些计算机里有很大一部分我们没有意识到它们的存在罢了。在这一章里,我将说明什么是嵌人式系统,以及可以在哪里找到它们。同附会介绍一下嵌人式编程的主题,说明一下为什么本书采用最近几十年里最令人惊讶的事,莫过于计算机逐渐占据了人类生活的主要地位。今天在我们的家里和办公室里,计算机的数量要比使用它们来生活和工作的人还要多,只是这些计算机里有很大一部分我们没有意识到它们的存在罢了。在这一章里,我将说明什么是嵌人式系统,以及可以在哪里找到它们。同附会介绍一下嵌人式编程的主题,说明一下为什么本书采用
32、C 和和 C+语言讲述,另外简单介绍一下示例中所用到的硬件环境。语言讲述,另外简单介绍一下示例中所用到的硬件环境。什么是嵌入式系统什么是嵌入式系统 一个嵌入式系统(一个嵌入式系统(embedded system)就是一个计算机硬件和软件的集合体,也许还包括其他一些机械部件,它是为完成某种特定的功能而设计的。一个很好的例子就是微波炉。几乎每个家庭都有一台,并且每天都有上千万台微波炉在被人们使用着,但是很少有人意识到有处理器和软件在帮助他们做饭。)就是一个计算机硬件和软件的集合体,也许还包括其他一些机械部件,它是为完成某种特定的功能而设计的。一个很好的例子就是微波炉。几乎每个家庭都有一台,并且每天
33、都有上千万台微波炉在被人们使用着,但是很少有人意识到有处理器和软件在帮助他们做饭。这和家里的个人计算机形成了鲜明的对比。同样是由计算机硬件和软件,还有机械部件(比如硬盘)组成的,个人计算机却不是用来完成某个特定功能的。相反它可以做各种不同的事情。很多人用通用计算机(这和家里的个人计算机形成了鲜明的对比。同样是由计算机硬件和软件,还有机械部件(比如硬盘)组成的,个人计算机却不是用来完成某个特定功能的。相反它可以做各种不同的事情。很多人用通用计算机(general-purpose computer)来区分这一点。在发货的时候,通用计算机就像一块没有字的黑板,制造商并不知道用户要拿它来做什么。一个用
34、户可能会用它来做文件服务器。另一个只用来玩游戏,还有一位可能会用它来写下一部伟大的美国小说。)来区分这一点。在发货的时候,通用计算机就像一块没有字的黑板,制造商并不知道用户要拿它来做什么。一个用户可能会用它来做文件服务器。另一个只用来玩游戏,还有一位可能会用它来写下一部伟大的美国小说。本章内容:本章内容:?什么是嵌入式系统 什么是嵌入式系统?各种实现间的差异 各种实现间的差异?C:最基本的必需品 C:最基本的必需品?关于硬件的一些说明 关于硬件的一些说明 而嵌入式系统常常是一些更大的系统中的一个组成部分。比如,现代的轿车或卡车里就包含了很多嵌人式系统。一个嵌人式系统会被用来控制防刹车锁死,另一
35、个监控车辆的气体排放情况,还有一个用来在仪表板上显示信息。虽然不是必需的,但在某些情况下,这些嵌人式系统会通过某种通信网络互相连起来。而嵌入式系统常常是一些更大的系统中的一个组成部分。比如,现代的轿车或卡车里就包含了很多嵌人式系统。一个嵌人式系统会被用来控制防刹车锁死,另一个监控车辆的气体排放情况,还有一个用来在仪表板上显示信息。虽然不是必需的,但在某些情况下,这些嵌人式系统会通过某种通信网络互相连起来。为了不至于混淆你的思路,有必要指出,通用计算机本身就是由很多嵌入式系统组成的。比如,我的电脑包含了键盘、鼠标、显示卡、调制解调器、硬盘、软盘和声卡,它们中的每一样都是一个嵌入式系统。每个设备都
36、包含处理器和相应的软件来完成特定的功能。比如凋制解调器就是用来在模拟电话线上收发数字信号用的。正是如此,所有其他的设备也都能归纳出这么一句话来。为了不至于混淆你的思路,有必要指出,通用计算机本身就是由很多嵌入式系统组成的。比如,我的电脑包含了键盘、鼠标、显示卡、调制解调器、硬盘、软盘和声卡,它们中的每一样都是一个嵌入式系统。每个设备都包含处理器和相应的软件来完成特定的功能。比如凋制解调器就是用来在模拟电话线上收发数字信号用的。正是如此,所有其他的设备也都能归纳出这么一句话来。如果一个嵌入式系统设计得很完善,那么它的使用者完全可以忽略它内部的处理器和软件的存在。微波炉、录像机和报时闹钟就是很好的
37、例子。在某些情况下,用同样的功能的定制集成电路硬件来代替上面所说的处理器和软件,也能做出具有同样功能的设备来。不过,如果真是这样用纯粹的硬件来设计的话,在灵活性上就会丧失不少了,改几行软件怎么说也要比重新设计一块硬件电路来得方便和便宜。如果一个嵌入式系统设计得很完善,那么它的使用者完全可以忽略它内部的处理器和软件的存在。微波炉、录像机和报时闹钟就是很好的例子。在某些情况下,用同样的功能的定制集成电路硬件来代替上面所说的处理器和软件,也能做出具有同样功能的设备来。不过,如果真是这样用纯粹的硬件来设计的话,在灵活性上就会丧失不少了,改几行软件怎么说也要比重新设计一块硬件电路来得方便和便宜。过去和将
38、来过去和将来 本章开头定义的嵌人式系统的第一个产品直到本章开头定义的嵌人式系统的第一个产品直到 1971 年以后才出现。这一年,年以后才出现。这一年,Intel 发布了世界上第一块微处理器,发布了世界上第一块微处理器,4004,主要被日本的,主要被日本的 Busicom 公司用来生产商用计算器。公司用来生产商用计算器。1969 年,年,Busicom 请请 Intel 为他们的每一种新式计算器分别设计一种定制的集成电路,为他们的每一种新式计算器分别设计一种定制的集成电路,Intel 则拿出了则拿出了 4004。Intel 没有为每一种计算器分别进行设计,而是设计了一种可以用在所有型号上的通用电
39、路。这个通用处理器被设计来读取存在外部存储芯片里的一系列指令(软件)。没有为每一种计算器分别进行设计,而是设计了一种可以用在所有型号上的通用电路。这个通用处理器被设计来读取存在外部存储芯片里的一系列指令(软件)。Intel 的想法是通过软件的设计可以为每一种计算器提供各自的特性。的想法是通过软件的设计可以为每一种计算器提供各自的特性。这种微处理器在一夜之间就成功了,并且在以后的十年中获得了广泛的应用。早期的嵌入式应用包括无人空间探测器、计算机控制的交通信号灯以及航空灯光控制系统。在整个这种微处理器在一夜之间就成功了,并且在以后的十年中获得了广泛的应用。早期的嵌入式应用包括无人空间探测器、计算机
40、控制的交通信号灯以及航空灯光控制系统。在整个 80 年代,嵌人式系统静悄悄地统治着微处理器时代,并把微处理器带人了我们个人和职业生活的每一个角落。装有嵌人式系统的电子设备已经充斥了我们的厨房(烤面包机、食物处理机、微波炉)、卧室(电视、音响、遥控器)和工作场所(传真机、寻呼机、激光打印机、点钞机和信用卡读卡机)。年代,嵌人式系统静悄悄地统治着微处理器时代,并把微处理器带人了我们个人和职业生活的每一个角落。装有嵌人式系统的电子设备已经充斥了我们的厨房(烤面包机、食物处理机、微波炉)、卧室(电视、音响、遥控器)和工作场所(传真机、寻呼机、激光打印机、点钞机和信用卡读卡机)。嵌入式系统的数量看起来肯
41、定会继续迅速增长。已经有很多具有巨大市场潜力的新的嵌入式设备了:可以被中央计算机控制的调光器和恒温器、当小孩子或矮个子的人在的时候不会充气的智能气囊、掌上电子记事簿和个人数字助理(嵌入式系统的数量看起来肯定会继续迅速增长。已经有很多具有巨大市场潜力的新的嵌入式设备了:可以被中央计算机控制的调光器和恒温器、当小孩子或矮个子的人在的时候不会充气的智能气囊、掌上电子记事簿和个人数字助理(PDA)、数码照相机和仪表导航系统。很明显,掌握一定技能并且愿意从事下一代嵌入式系统设计的人将会获得很多的机会。)、数码照相机和仪表导航系统。很明显,掌握一定技能并且愿意从事下一代嵌入式系统设计的人将会获得很多的机会
42、。实时系统实时系统 现在很有必要介绍一下嵌入式系统的一个子集。按照通常的定义,实时系统(现在很有必要介绍一下嵌入式系统的一个子集。按照通常的定义,实时系统(real-time system)就是有一定时间约束的计算机系统。换句话说,实时系统可以部分地从及时完成计算或判断的能力来辨别。这些重要的计算有完成的明确期限,并且,对实际应用来说,一个延期的反应就像一个错误的结果一样糟糕。)就是有一定时间约束的计算机系统。换句话说,实时系统可以部分地从及时完成计算或判断的能力来辨别。这些重要的计算有完成的明确期限,并且,对实际应用来说,一个延期的反应就像一个错误的结果一样糟糕。如果一旦延期会产生什么结果,
43、是至关重要的问题。例如,如果一个实时系统是飞机飞行控制系统的一部分,那么一个延期的计算就可能会使乘客和机组人员的生命受到威胁。而把这个系统用在卫星通信环境下,危害也许可以限制在仅仅一个损坏的数据包。在更严格的情况下,很可能这个时间期限是“硬性”需求的,也就是说,这个系统是个“硬”实时系统,和它对应的就有“软”实时系统了。如果一旦延期会产生什么结果,是至关重要的问题。例如,如果一个实时系统是飞机飞行控制系统的一部分,那么一个延期的计算就可能会使乘客和机组人员的生命受到威胁。而把这个系统用在卫星通信环境下,危害也许可以限制在仅仅一个损坏的数据包。在更严格的情况下,很可能这个时间期限是“硬性”需求的
44、,也就是说,这个系统是个“硬”实时系统,和它对应的就有“软”实时系统了。本书中所有的主题和示例都可以应用到实时系统中。不过本书中所有的主题和示例都可以应用到实时系统中。不过 一个实时系统的设计者必须更加细心,他必须保证软件和硬件在所有可能的情况下都能可靠工作。同时,根据人们生活对该系统可靠执行的依赖程度,这种保证一定要有工程计算和描述性的论文加以支持。一个实时系统的设计者必须更加细心,他必须保证软件和硬件在所有可能的情况下都能可靠工作。同时,根据人们生活对该系统可靠执行的依赖程度,这种保证一定要有工程计算和描述性的论文加以支持。各种实现间的差异各种实现间的差异 与为通用计算机设计的软件不同,嵌
45、人式软件通常无法在不做显著修改的情况下在其他嵌入式系统中运行。这主要是由底层硬件之间的明显不同所致。每个嵌人式系统的硬件都是为特定的应用专门调整过的,这样才能使系统的成本保持很低。所以,不必要的电路就被省去了,硬件资源也尽可能地共享使用。在这一节里你会学到哪些硬件特性是所有嵌人式系统共有的以及其他方面为什么又会有如此多的不同之处。与为通用计算机设计的软件不同,嵌人式软件通常无法在不做显著修改的情况下在其他嵌入式系统中运行。这主要是由底层硬件之间的明显不同所致。每个嵌人式系统的硬件都是为特定的应用专门调整过的,这样才能使系统的成本保持很低。所以,不必要的电路就被省去了,硬件资源也尽可能地共享使用
46、。在这一节里你会学到哪些硬件特性是所有嵌人式系统共有的以及其他方面为什么又会有如此多的不同之处。通过定义我们知道所有的嵌入式系统都包含处理器和软件,那么还有哪些特性是它们共有的呢?当然,要想执行软件,就一定要有存储执行代码的地方和管理运行时数据的临时存储区,这就分别要用到通过定义我们知道所有的嵌入式系统都包含处理器和软件,那么还有哪些特性是它们共有的呢?当然,要想执行软件,就一定要有存储执行代码的地方和管理运行时数据的临时存储区,这就分别要用到 ROM 和和 RAM;任何嵌入式系统都会有一些存储区。如果只要求很少的存储量,也许就使用与处理器在同一芯片里的存储器,否则就需要使用外部存储芯片来实现
47、。;任何嵌入式系统都会有一些存储区。如果只要求很少的存储量,也许就使用与处理器在同一芯片里的存储器,否则就需要使用外部存储芯片来实现。所有嵌人式系统都包含其种输入和输出。例如,一个微波炉的输人就是前面板上的按钮和温度探测器,输出就是人可阅读的显示信息和微波射线。嵌入式系统的输出几乎总是它的输入和其他一些因素的函数、包括花费的时间、当前的温度等等。输入常见的形式有传感器和探测器。通信信号或物理世界的某些变化。图所有嵌人式系统都包含其种输入和输出。例如,一个微波炉的输人就是前面板上的按钮和温度探测器,输出就是人可阅读的显示信息和微波射线。嵌入式系统的输出几乎总是它的输入和其他一些因素的函数、包括花
48、费的时间、当前的温度等等。输入常见的形式有传感器和探测器。通信信号或物理世界的某些变化。图 1-1 给出了嵌入式系统的一个常见的例子。给出了嵌入式系统的一个常见的例子。图图 1-1 一个基本的嵌入式系统一个基本的嵌入式系统 除了上述几个共同点,嵌入式系统的其他部分通常是互不相同的。实现之间的差异是由不同的设计侧重导致的。每个系统都是面向完全不同的一整套需求,这些需求的折中考虑直接影响了产品的开发过程。例如,如果一个系统要求成本低于除了上述几个共同点,嵌入式系统的其他部分通常是互不相同的。实现之间的差异是由不同的设计侧重导致的。每个系统都是面向完全不同的一整套需求,这些需求的折中考虑直接影响了产
49、品的开发过程。例如,如果一个系统要求成本低于 10 美元美元,那么就有可能要牺牲一些处理性能或可靠性才能达到要求。那么就有可能要牺牲一些处理性能或可靠性才能达到要求。当然,生产成本只是嵌入式硬件开发人员需要考虑的一个可能的限制而已。其他要考虑的设计需要还包括:当然,生产成本只是嵌入式硬件开发人员需要考虑的一个可能的限制而已。其他要考虑的设计需要还包括:处理能力处理能力 要完成目标所需的运算能力。一个常用来衡量运算能力的指标是要完成目标所需的运算能力。一个常用来衡量运算能力的指标是 MIPS(以百万计算的每秒可执行的指令数量)。如果两个处理器的指标分别是(以百万计算的每秒可执行的指令数量)。如果
50、两个处理器的指标分别是 25MIPS 和和40MIPS,那么就说后者的运算能力更强一些。但是,还需要考虑处理器的其他一些重要特性。其中之一是寄存器字长,一般会是,那么就说后者的运算能力更强一些。但是,还需要考虑处理器的其他一些重要特性。其中之一是寄存器字长,一般会是 8 到到 64 位。现在的通用计算位。现在的通用计算机一般使用机一般使用 32 位或位或 64 位的处理器,但是嵌入式系统通常仍使用更老、更便宜的位的处理器,但是嵌入式系统通常仍使用更老、更便宜的 8 位和位和 16 位处理器。位处理器。存储器存储器 用来保存执行代码和操作数据的存储器的容量。硬件设计人员必须事先做出估计并且在软件