嵌入式系统软件教程
作者 : David E.Simon
译者 : 陈向群 等
丛书名 : 计算机科学丛书
出版日期 : 2005-09-28
ISBN : 7-111-16937-9
定价 : 39.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 296
开本 : 16开
原书名 : An Embedded Software Primer
原出版社: Addison-Wesley
属性分类: 教材
包含CD :
绝版 :
图书简介

本书特色:
  ●易读性 本书从计算机程序设计的基础知识入手,以实例讲解的方式帮助读者快速掌握嵌入式系统软件设计的核心技术与技巧,内容讲解清晰明了,通俗易懂。
  ●实用性 本书突出工程实践,注重提高工程能力。作者把各种嵌入式系统的软件设计经验、开发技巧以及面对问题时所需要的知识与解决方案,同嵌入式系统软件的基本原理有机地结合在一起。
  ●通用性 本书不针对某一种特定的微处理器或实时操作系统进行讲解,也不面向某一种软件设计方法。无论读者所设计的嵌入式系统软件采用哪一种微处理器、哪一种实时操作系统以及哪一种软件设计方法,本书所提供的原理和程序设计技巧都是适用的。
  本书附赠光盘中包括实时操作内核C/OS V1.11以及样例代码等。

读者对象:
  在阅读本书之前读者不需要对嵌入式系统的软件有任何了解,只需要熟悉计算机程序设计的基本概念、学习过C程序设计语言即可。
  本书适合作为高等院校计算机、电子、通信、软件工程等专业高年级学生嵌入式系统软件课程的教材,也可供从事嵌入式系统软件编程的软件工程师参考。

图书特色

图书前言

本书为初学者系统讲解嵌入式软件基本原理。综合讨论了有关这个领域的各种技术,尤其讨论了对实时操作系统的恰当运用,而实时操作系统是许多嵌入式软件的基础。除了介绍这些系统的功能之外,本书还说明了如何有效地使用这些操作系统。
  在阅读本书之前读者不需要对嵌入式系统的软件和有关问题有任何的了解,作者会从基础开始进行讨论。不论你是一位有一年或多年编程经验的软件工程师,还是刚刚学习了一些编程课程的学生,你都应该熟悉一些计算机程序设计的基本概念,应该理解编写程序过程中的有关问题。本书要求读者学习过C程序设计语言,因为C是嵌入式系统中的“国际通用语言”。如果读者计划进入嵌入式领域,那么迟早都得学习C语言。当然,通晓一些汇编语言的知识也会有帮助的。
  你肯定看到过一些关于软件的书足有800页、900页,甚至1000页厚,也许你已经发现这本书则薄得多。这是作者的一种愿望,目的就是让读者尽可能多地翻阅它。这本书没有标榜“读者所要了解的有关嵌入式系统软件的一切”。没有人能够写出这样的书,即使某个人能够写出来,读者无论如何也不会读它的。本书更像是提供“想开始从事嵌入式系统软件工作所需要了解的”知识,告诉读者在遇到问题时所需要掌握的必要知识,并且让读者对所涉及的系统有所认识,从而能够解决所遇到的问题。
  本书并不针对某一种特定的微处理器或实时操作系统,也不面向某一特定软件设计方法。无论是采用哪一种微处理器、哪一种实时操作系统、哪一种软件设计方法,原理都是相同的。本书中,我们专注于原理—可以运用到几乎所有的嵌入式系统项目的原理。在读者需要了解特定的微处理器以及实时操作系统时,可以参考硬件和软件销售商随产品提供的手册。本书会告诉读者应该查找哪些信息。
  本书既不是学术性的也不是理论性的著作,而是为读者提供工程方面的信息以及相关建议。
  总之,这本书是编写嵌入式系统软件所需要的一块基石。

致谢
  如果没有别人的帮助,一个人就不会有足够好的创意来写这样一本书,或者也不会有足够的毅力坚持把它完成。所以,下面按照时间的先后顺序介绍所有帮助我完成这本书的人们。
  首先要感谢Probitas公司的人们:感谢A. J. Nichols,他使得公司成为一个如此富有思想且高质量的软件环境;感谢Michael Grischy,感谢他正在进行的关于嵌入式系统设计的讨论和编码风格;感谢Richard Steinberg,他检查了本书的代码示例;感谢Ric Vilbig,他检查了关于硬件的两个章节,并改正了我的许多误解。
  我的妻子,Lynn Gordon,鼓励我写这本书,并正确地预见到我将非常喜爱做这件事。感谢你鼓励我开始,感谢你所做的编辑工作……即使在英语用法的细节上,你也总是正确的。
  感谢6个班的全体学生:感谢那些提出深刻问题,并因此促使我理清思路的学生们;感谢那些提出基本问题,并因此促使我详细阐明解释的学生们;另外,感谢所有拿到我的初稿后保持沉默的学生们。
  感谢Dragon Systems有限公司的聪明的伙计们,感谢你们编写的NaturallySpeaking程序,这个语音识别程序是如此之好,使得我不用受很多打字之苦就可以准备出手稿。
  非常感谢Jean Labrosse允许我在本书中使用他的实时操作系统mC/OS。你写出这个系统,并允许它在教育领域免费使用,真是帮了世界一个大忙。
  感谢John Keenan,你教会我许多硬件的知识,并且直率地指出我的手稿中的许多错误。
  以下是检查了手稿的第一版并提出大量好的建议的人们,他们中许多人的名字我已经在书中提到:Antonio Bigazzi、Fred Clegg、David Cuka、Micheal Eager、John Kwan、Tom Lyons以及Steve Vinoski。感谢你们!
  感谢Zilog公司的Mike Hulme,允许我在第3章的最后使用图表的例子,并提供了清晰的副本。
  最后,感谢Debbie Lafferty和Jacquelyn Doucette监管了本书从开始到出版的所有阶段;感谢Ann Knight和Regina Knox指出所有不知为何我写的时候是清楚的但后来别人阅读时却不清楚的地方;感谢Laurel Muller将我画的草图制成清晰的图表。

关于本书和光盘

嵌入式系统的不同之处
  嵌入式系统中一个非常令人遗憾的地方在于,有关术语不是很统一:每一个概念都有2~3个不同的词表述,每一个词又有4~5个略微不同的意思,而读者只能忍受这件事。在本书中,我们将指出这些意思的不同之处,之后我们会为每一个词指定一个明确的意义来帮助读者不会混淆。当读者阅读其他的书或是与人交谈时,读者需要注意他们的用词可能与在本书中这些词的意思有一些不同。
  另一个令人遗憾的地方在于嵌入式系统这个词涵盖了很大范围的产品,概括起来是很困难的。嵌入式系统可建立在不同的微处理器上,从Z8(不能够使用外存的8位微处理器)到PowerPC(可以访问千兆字节的32位微处理器),其应用程序的代码大小也从500个字节到数百万个字节不等。
  基于这些原因,以及应用的不同,在嵌入式系统这个领域里没有什么是通用的。某个被85%的工程师视为最佳实践的规则,在另外15%的工程师眼里有时为了系统运转不得不被打破。本书将关注适用于85%情况下的规则,重点强调概念和规则背后的原理,并帮助读者决定是应该遵从这些通用规则呢,还是读者的项目属于另外15%的情况。

本书的章节间依赖关系
  尽管这本书是打算让读者按顺序从头读到尾的,尽管每一章都至少依赖一点它前面的章节,但是如果读者喜欢,还是可以跳过一些章节。由于本书对每一部分都从最基本的知识讲起,如果读者已经知道了一些相关的知识,可以跳过这些段落。章节之间最主要的依赖关系如下页图所示。
  例如,如果读者已经很熟悉硬件,或者不需要了解这些,读者可以跳过第2章和第3章。但是不要尝试在没有阅读第4章、且不了解相关知识的情况下就阅读第6章。

C++
  尽管C++在嵌入式系统领域中是一个越来越流行的语言,但读者不会在本书中看到它。这并不是不鼓励读者使用这个在嵌入式系统领域和应用程序领域中都如此通用的C++语言。但是C++有一个公认的缺点在于:它是一种复杂的语言,在很多方面都比C语言复杂和难以捉摸。本书所讨论的编程原则对于C和C++都是通用的(也包括Ada、Java、BASIC……)。

C!!
  在诸如本书这样的书中提供容易理解示例,常见的一个问题(也是一般软件的问题)是,关键之处总是隐藏在细节中。为了避免这种事情在本书中出现,书中的有些示例不是全部用C,而是用C!!写成的。
  除了放了两个惊叹号之外,C!!和C完全一样,计算机会完成惊叹号后所描述的一切。
  例如:
if (x != 0 )
{
  // 从硬件计时器中读出值
  // 进行必要的计算
y = // 将计算结果存储在y中
}
if ( y > 197 )
{
  // 点亮报警灯
}
.
.
.
  如果x不为零,此程序将从硬件计时器中读出值,而后将进行必要的计算并将结果存储在y中。如果y>197,此程序将点亮报警灯。
  接下来假定只使用C!!的特殊性质来编写一些应用中依赖硬件或需要进行指定计算的代码。例子中的这些部分是用普通的C语言编写的。

匈牙利变量命名方法
  本书中很多代码实例使用匈牙利标记法来命名变量。下面简要介绍此规范。在匈牙利标记法中,变量名中包含关于它的类型信息。例如,整型(int)变量名以字母i开头,字节型(byte)变量以“by”开头等。而且,变量名的前缀可以表明此变量是一个指针(“p_”)还是一个数组(“a_”)等。下面是一些典型的变量名以及我们从这些变量名中可推断出的信息:
byError—字节型变量(可能包含一个错误代码)。
iTank—整型变量(可能包含油罐的数目)。
p_iTank—整型指针。
a_chPrint—字符型数组(大多数情况,信息将被打印出来)。
fDone—一个标记(表明一个过程是否完成)。
  虽然一开始理解这些名字有点费力,但是人们普遍认为变量名中包含的少量信息可以方便编程,这就是匈牙利标记法流行的原因。

mC/OS
  如果读者已经看了第6章中关于实时操作系统的讨论,读者可能想亲手试用这样一种系统。为了帮助读者实现这样的想法,本书附带的光盘会提供mC/OS(发音为“micro-see-oh-ess”)。此光盘上的内容已经得到mC/OS的作者Jean Labrosse的许可。读者可以将mC/OS作为一种学习工具来使用,但是不可以在不经许可的情况下用于任何商业产品。mC/OS不是共享软件,下面有关于mC/OS的许可。第6、7章和表11-2可以引导读者使用此系统。如果读者想了解关于此系统更多的信息,可以参见本书后“进一步阅读”书目列表中Labrosse的书籍,或者到mC/OS的网站了解更多信息。

mC/OS许可证
  mC/OS的源代码和目标代码可以免费分发给可信赖的大学和学院的学生使用,只要不用于商业应用就不需要许可证。也就是说,将mC/OS用于教育目的并不需要许可证。
  要将mC/OS嵌入在商业产品中,需要得到目标代码分发许可证,它允许将mC/OS用在盈利性产品中但需要支付一定量的许可费用,需要联系Labrosse先生来商讨价格。
  如果打算分发mC/OS的源代码,同样需要得到源代码分发许可证,同样也需要支付许可费用,可联系Labrosse先生来商讨价格。
  可以通过以下联系方式联系到Jean Labrosse先生:
  Jean.Labrosse@uCOS-II.com
  或者
  Jean J. Labrosse
  949 Crestview Circle
  Weston, FL 33327
  USA
  1-954-217-2036 (电话 )
  1-954-217-2037(传真)
  官方网站为www.ucos-ii.com。读者可以联系Labrosse先生获得关于mC/OS的支持,但前提是读者已经从mC/OS网站得到了mC/OS的最新版本和补丁。
  附带光盘中的实例程序和mC/OS需要在DOS环境下使用Borland C/C++编译器方可使用。现在可以花$49.95得到此编译器的教学版本(只用于学习目的,不能用于商用产品的开发)。不同的零售商都提供此编译器,读者也可以通过www.borland.com与Borland公司联系。

作者简介

David E.Simon:David E.Simon:  Probitas公司 (美国一家从事软件开发咨询的企业) 的合伙人。他在Probitas公司的大部分工作与Apple、Adobe、HP以及ST等企业的嵌入式系统有关。David有20多年嵌入式系统软件设计与开发经验,并定期担任加州大学伯克利分校嵌入式系统延伸课程的教学工作。

译者简介

陈向群 等:暂无简介

图书目录

第1章  嵌入式系统初探 1
1.1  嵌入式系统的举例 1
1.2  典型的硬件 5
本章总结 6
第2章  软件技术的硬件基础 7
2.1  术语 7
2.2  门 9
2.3  其他一些基础知识 11
2.4  时序图 16
2.5  内存 18
本章总结 22
习题 23
第3章  高级硬件基础 25
3.1  微处理器 25
3.2  总线 26
3.3  直接内存访问 32
3.4  中断 35
3.5  其他常用元器件 35
3.6  与微处理器集成的元器件 41
3.7  示意图规范 44
3.8  示意图实例 44
3.9  有关硬件的最后几句话 46
本章总结 46
习题 46
第4章  中断 49
4.1  微处理器体系结构 49
4.2  中断基础知识 51
4.3  共享数据问题 55
4.4  中断延迟 63
本章总结 68
习题 69
第5章  软件体系结构综述 71
5.1  轮转结构 71
5.2  带有中断的轮转结构 73
5.3  函数队列调度结构 79
5.4  实时操作系统结构 81
5.5  软件结构的选择 82
本章总结 83
习题 83
第6章  实时操作系统导论 87
6.1  任务和任务状态 88
6.2  任务和数据 91
6.3  信号量和共享数据 98
本章总结 108
习题 108
第7章  操作系统服务 111
7.1  消息队列、信箱和管道 111
7.2  定时器函数 119
7.3  事件 124
7.4  存储管理 127
7.5  RTOS环境中的中断程序 129
本章总结 134
习题 134
第8章  实时操作系统的基本设计 141
8.1  概述 141
8.2  原理 142
8.3  举例 153
8.4  信号量和队列的封装 160
8.5  硬实时系统调度问题 167
8.6  节省存储空间 167
8.7  节省能源 170
本章总结 171
习题 172
第9章  嵌入式软件开发工具 173
9.1  宿主机和目标机 173
9.2  嵌入式系统的链接器/定位器 174
9.3  把嵌入式软件加入到目标系统中 184
本章总结 187
第10章  调试技术 189
10.1  在宿主机上进行测试 189
10.2  指令集模拟器 202
10.3  assert宏 203
10.4  使用库工具 205
本章总结 217
习题 218
第11章  一个实例系统 219
11.1  程序是做什么用的 219
11.2  程序运行的环境 221
11.3  源代码指南 223
11.4  源代码 225
本章总结 276
习题 277
后记 279
进一步阅读 281
索引 283

教学资源推荐
作者: 陈虎,汤德佑,黄敏 著
作者: [美]威廉·斯托林斯(William Stallings)著
作者: 袁春风,余子濠 编著
作者: [奥地利]赫尔曼·科佩茨(Hermann Kopetz)著
参考读物推荐
作者: [土耳其] 卡格特·古尔图克(Cagatay Gurturk)著
作者: Mark Artiges等
作者: 国际商业机器中国有限公司