《嵌入式系统原理》是嵌入式系统的原理性教材,作者根据多年在嵌入式领域中的实践经验,在书中严选了一部分比较有代表性的实例。《嵌入式系统原理》的写作宗旨是拨开嵌入式系统纷繁复杂的迷雾,提炼其中的精华,系统性地将嵌入式系统的设计原理介绍给读者,而不是聚焦于某一款具体的芯片或某一种特定的操作系统。《嵌入式系统原理》的另一个特点是从多角度、全方位对嵌入式系统进行审视和剖析,提出并运行一种新颖的五层结构模型来诠释嵌入式系统的内涵和真谛。
《嵌入式系统原理》结构清晰,运用了通俗易懂的语言进行讲解,并辅以生动翔实的例子来进行说明,是一本从全新角度来阐述与理解嵌入式系统的原理性教材。
《嵌入式系统原理》既可作为高等院校相关专业的教材,也可作为从事研发、生产和教学的广大科技工作者的自学用书。
读者对象
《嵌入式系统原理》既可作为高等院校相关专业的教材,也可作为从事研发、生产和教学的广大科技工作者的自学用书。
厚积薄发,集作者近20年研究、教学、开发之结晶,成果得到行业、学术界和学生认可!
语言通俗
深入浅出,注重理论和实例结合,文字视图并举!简化和抽象嵌入式系统,过滤纷繁商业!
肉涵全面
覆盖嵌入式系统从设计到消亡的全过程,跨越技术与时代!
理论突破结合中国传统阴阳逻辑之精髓,打破嵌入式系统无基础理论的组合与堆砌状态,建立完整的系统分类、构造、分析和评价体系及工程方法!
火星探测器探索太空的实现,赋予了人类更大的想象空间;高科技战争中全球范围内的精确制导攻击,带来了全球性的安全隐患;植入人体的电子起搏器,挽救了无数人的生命;成千上万大规模使用的无线传感网络,在军事、环保和建筑测量等众多领域发挥着不可限量的作用。从现实的角度来说,这些都属于嵌入式系统的范畴。这么多类别,这么多领域,可以用相对独立的理论将它们统一起来吗?
人们可以忍受PC死机,但绝不允许家里的电视死机;而汽车的调速系统和飞行器的制导系统在运行中更不能出问题,否则后果是灾难性的。那么嵌入式系统可靠性如何保障?又应该如何分类?
学生们把智能手机、数码音乐播放器、手持游戏机、掌上电脑、数码相机和电视机顶盒等大量消费类电子产品当作嵌入式系统的全部,甚至经常有学生将PC认为是计算机的全部和将Windows认为是操作系统的全部一样,这些是谁的错?
以上问题,通过本书可以找到答案。
二、写作动机
1 学科整合感受
1998年,从香港做博士后归来后,在南开大学建立了“嵌入式系统与信息安全”实验室,全面开始对嵌入式系统进行抽象和针对性研究。从带有网络控制性质的自动售货机,到具有消费类电子的基于Linux的手持电子阅读器,其间主持了两个操作系统的设计与应用,即Wolf miniOS(相当于μcOS)和Wolf Linux。加之早年(1986~1996年)在自动控制中的实践,体会到了自动控制和计算机两个专业角度体会嵌入式系统的不同。想将此种感受纪录和抽象出来是写作本书的动机之一。
2 科研、产业体验总结
大学毕业后二十余年间,前十年(1986~1996年)主要从事自动控制方面的教学和科研工作,后十年(1997年至今)主要从事计算机系统方面的教学、科研和产业方面的工作。在这种工作跨度中,深深体会到教育、工业和商业方面的区别。这种感悟和体会的纪录,便是写作本书的动机之二。
3 教学培养压力
从2003年开始,在南开大学为信息学院的硕士研究生开始教授“现代嵌入式系统”已经近五年,授课期间感受到很多系统抽象方面的内容。然从2004年开始为学院本科主讲“嵌入式系统”以来,面对学生缺乏基本专业知识,市面参考书目良莠不齐,国外教材与国内难以同步,网络资源缺乏权威和严肃性等状态,颇受缺乏有效教材的袭扰,由此形成了本人写作本书的主要动力!
2004年开始规划,至今已经跨越了四个年度。
三、主要思想
1 嵌入式系统定义与分类方式
嵌入式系统作为概念并不是新词,大约二十多年前就已经有定义了,而被学科和人们开始重视,应该也仅是近十几年的事情。但从“嵌入式系统”定义的角度,却发生了较大的分歧,由此形成对系统评判和构造的方向性差异,也就是:
应用设备系统(本书中称作对象体系)中含有专用计算机系统;
将专用计算机系统嵌入到应用设备系统中。
这是方向的不同,本书中强调后者,即“将专用计算机系统嵌入到应用设备系统中”,但也不绝对否认前者,因为前者是很多单片机系统的构造方式,至今依旧是嵌入式系统中的重要组织方式。从这个角度来说,本书作为教材是兼收并蓄的,而不是学术极化。
本书依据嵌入式系统的可靠性、实时、交换和可信四个主轴,为现存的嵌入式系统进行了全面的分类,因此为学生建立前面的嵌入式系统概念,建立了全局的基础。例如,按照本书的划分,将WinCE系统划分为:可崩溃可交换非可信非实时系统,这样从类别的角度,可让学生清晰的建立全局观,客观的审视和评价周边的嵌入式系统。这一点应该是本教材的突破,既屏蔽应用和商业带来的障碍,又提高了学习过程的感知度和理解度。
2 系统结构层次
五层结构
按照常规嵌入式系统层次的分法,大都将嵌入式系统分为三层,即硬件+操作系统+应用。但本书将系统细分为五层,主要思想来源于PC产业的细分。PC中的BIOS(Basic Input Output System,基本输入/输出系统)将PC的硬件制造和个人计算机系统分离,同时也将硬件和软件变化分离,由此可以保证系统的整体可靠性。书中强化了最小系统和驱动部分,并将操作系统的UI(User interface用户接口)剥离。
裁减控制
关于内核的描述,书中引入了层次结构下的模块式结构和插件式结构,明晰和强调了嵌入式系统的另一大特征——可裁剪性。
控制数学模型
在结构性分析的同时,书中强调了工程控制论思想,明确了在嵌入式系统土壤中如何构造以精确控制为目标的控制数学模型。
3 评价体系
系统与平衡
对于嵌入式系统的评价,很难用绝对的方式进行衡量,就像人的健康状态,极化任何一个方面,都可能造成误导。因此,建立嵌入式系统评价体系,应从系统和平衡的着眼点进行考量。
过程与生存环境
评价应该包括嵌入式系统的全过程,从系统的创建、设计、制造,到运行/维护和消亡,也因此形成了设计空间、制造空间、运维空间和用户空间的嵌入式系统环境概念。这是大多数教材和论著忽略的,但在本书中相对强化了该点,这些在本书封面上都有所体现。
系统制约与干扰
嵌入式系统不是孤立的,它与对象体系既息息相关,又有制约和干扰。表达方式上,书中采用了蜘蛛图进行描述,比较形象。整体的评价体系充分的吸收了我国传统阴阳系统二元逻辑,多级对称的精髓,注重在很多方面强调了两极互补、互动的关系。例如,硬件与软件、处理器和存储、程序与数据等。客观地定位了大多数人强化嵌入式操作系统和数据库的观点,将其定位为本书定义体系下的中间件,即在设计中,工程师希望它们越庞大越好,但在用户使用时,则希望其越瘦、越薄为好,否则在性能、可靠性、成本等方面都会受到影响。
4 工程方法
嵌入式系统的工程方法主要强调设计空间环节,以及与之密切相关的制造和维护空间。
时间指标量化
传统的控制和仪表系统,大都在时序控制和时间精细安排方面有着众多的原则和理论支撑,但在计算机系统中,软件编程人员往往淡化这一概念。真对于这一方面,本书也安排了相关融合内容,来强调时间量化和时序的重要性。
系统可裁剪
系统配置和条件编译,无疑是裁减过程的重要环节,但嵌入式系统的可裁剪性应该体现在所有的环节和模块中。为此,本书从软件封装到硬件支撑等许多部分都安排了相关内容的讲解,来使读者了解相关的设计考虑。
系统整合
嵌入式系统整合是从事嵌入式系统设计人员必须具备的意识和能力。例如,Motorola公司发布的A780手机,是基于嵌入式Linux操作系统的,整体整合了十几家嵌入式软件产品,才形成了最终的用户产品。这意味着整合本身就需要很强的评判、界定和融合能力。作为裁剪相对应的部分,这一概念也是本书中强调的重点之一。
透明可测性设计
复杂系统性能和可靠性的保障,不完全靠认真,或者负责任,还必须依靠合理有效的方法去保障,其中每个环节加入透明可测设计,是非常有效的。此类方法是故障隔离的前提,尽管在设计的初期会产生性能或用户体验的下降,但在系统成熟的过程中,其优势会充分体现出来。
5 发展与变化
电子和IT领域中有一个重要的特点,就是变化快,思想和感悟难于沉淀,嵌入式系统同样难以逃离这样的规律。本书试图将抽象的模型、体系判据和工程方法与具体的商业产品分开,减少变化引起的冲击。由于书中主要采用了系统辩证的方法去解释和阐述,使得该书作为教材具有较强的适应力。尽管如此,也很难以书面的方式应对所有的问题,因此本书在出版的同时,也在南开大学嵌入式系统与信息安全实验室的网站上专门开辟了《嵌入式系统原理》论坛,欢迎关注该书的专家、教师、读者和同学多多参与这样的互动,发表您的宝贵意见,与我们一起努力,帮助这本教材的成长。
第1章 嵌入式系统历史与现代特征
1.1 定义2
1.2 嵌入式系统与相关领域的历史3
1.2.1 嵌入式系统的发展历史4
1.2.2 计算与机器计算5
1.2.3 自动控制的发展历程6
1.2.4 计算机的发展历史8
1.3 危机与发展特征15
1.3.1 嵌入式系统的危机15
1.3.2 嵌入式系统的发展特征17
本章小结18
第2章 系统结构与模型
2.1 系统与系统思想20
2.1.1 系统思想20
2.1.2 系统结构的一些概念23
2.2 系统五层结构模型26
2.2.1 物理结构与逻辑结构26
2.2.2 五层结构模型 28
2.2.3 各层的功能及指标29
2.2.4 五层模型的应用与评价34
2.3 模型建立36
2.3.1 嵌入式系统模型定义36
2.3.2 建模原则39
2.3.3 建模方法与步骤40
2.3.4 面向对象的建模过程41
2.4 模型使用45
2.4.1 结构化综合控制模型45
2.4.2 对象化环模型47
2.4.3 建模示例49
本章小结54
习题55
第3章 系统硬件体系
3.1 硬件体系框架57
3.2 硬件系统元素61
3.2.1 微处理器和指令系统61
3.2.2 存储器80
3.2.3 输入/输出设备85
3.2.4 通信与扩展接口91
3.3 硬件系统要素98
3.3.1 时钟与总线99
3.3.2 内存管理 108
3.3.3 看门狗技术111
3.3.4 供电与能耗114
3.4 硬件系统评价117
3.4.1 常规指标117
3.4.2 资源分配118
3.4.3 电气功耗120
3.4.4 可靠性和稳定性121
本章小结121
习题124
第4章 最小系统:引导与驱动
4.1 引导层建立126
4.1.1 引导部分127
4.1.2 驱动部分128
4.1.3 BIOS 128
4.2 引导模式131
4.2.1 非片内引导131
4.2.2 片内引导133
4.3 中断、I/O、MMU初始化134
4.3.1 中断初始化134
4.3.2 I/O初始化137
4.3.3 MMU初始化138
4.4 驱动部分的设计140
4.4.1 驱动部分的设计开发140
4.4.2 BSP与BIOS 144
4.5 运行举例144
4.5.1 最小系统145
4.5.2 WinCE 146
4.5.3 Linux147
4.5.4 PCDOS150
本章小结151
习题152
第5章 中间件: 嵌入式操作系统和数据库
5.1 嵌入式操作系统154
5.1.1 操作系统体系结构156
5.1.2 实时特性172
5.1.3 操作系统裁剪188
5.1.4 嵌入式操作系统评测200
5.2 用户接口203
5.2.1 UI的定义204
5.2.2 UI的发展历程204
5.2.3 嵌入式UI的结构特点205
5.2.4 嵌入式UI设计原则209
5.3 嵌入式数据库211
5.3.1 定义212
5.3.2 作用与应用特性212
5.3.3 设计要求214
5.3.4 嵌入式移动数据库215
5.3.5 嵌入式本地数据库217
本章小结219
习题220
第6章 应用编程与数据处理
6.1 程序与数据评价222
6.1.1 程序与数据--信息的表现222
6.1.2 开放性225
6.1.3 兼容性226
6.2 汇编语言与C语言227
6.2.1 汇编语言227
6.2.2 C语言229
6.2.3 汇编语言与C语言嵌入式编程举例234
6.3 Java237
6.3.1 Java体系结构237
6.3.2 JVM 239
6.3.3 Java标准与规范241
6.3.4 Java与 C语言混合编程245
6.3.5 Java嵌入式编程举例246
6.4 .NET与XML248
6.4.1 .NET战略249
6.4.2 XML252
6.4.3 NET嵌入式设计举例254
6.5 应用编程与数据处理255
6.5.1 应用编程256
6.5.2 数据处理262
6.5.3 电子阅读器应用举例265
6.6 嵌入式系统测试267
6.6.1 软件测试267
6.6.2 硬件测试275
6.6.3 综合测试举例286
本章小结287
习题288
第7章 指标体系与系统类别分析
7.1 内在指标290
7.1.1 传统评价291
7.1.2 信息评价302
7.2 作用指标304
7.2.1 干扰度305
7.2.2 智能度306
7.2.3 控制度308
7.2.4 融合度310
7.3 封装与软件整合311
7.3.1 封装311
7.3.2 软件整合312
7.4 系统安全314
7.4.1 系统安全概述314
7.4.2 嵌入式系统安全315
7.4.3 本质安全概述316
7.5 可靠性319
7.5.1 定义及说明319
7.5.2 评价方法319
7.5.3 优化方法320
7.6 裁剪321
7.6.1 硬件裁剪321
7.6.2 软件裁剪322
7.7 指标体系326
7.8 嵌入式系统类别分析330
7.8.1 可崩溃、不可崩溃系统331
7.8.2 实时/非实时系统332
7.8.3 可交换/不可交换系统334
7.8.4 可信/非可信系统335
本章小结337
习题338
参考文献339