第1章 嵌入式系统概论 1
1.1 无所不在的嵌入式系统 1
1.1.1 采样控制系统 2
1.1.2 飞行控制系统 3
1.1.3 信息家电 3
1.1.4 实时信号处理系统 4
1.1.5 汽车电子产品 5
1.1.6 普适计算 6
1.1.7 仿真测试 7
1.2 嵌入式系统定义 8
1.2.1 计算机工业的分类 8
1.2.2 嵌入式系统 8
1.2.3 实时系统 9
1.2.4 嵌入式系统的实时性 10
1.3 嵌入式系统的特征 10
1.3.1 技术密集 11
1.3.2 专用紧凑 11
1.3.3 安全可靠 12
1.3.4 多种多样 12
1.3.5 及时响应 12
1.3.6 成本敏感 13
1.3.7 开发困难 13
1.3.8 不可垄断 13
1.3.9 其他 14
1.4 嵌入式系统的发展历程 14
1.5 嵌入式系统的分类 17
1.5.1 按微处理器位数划分 17
1.5.2 按应用类别划分 17
1.5.3 按系统的实时性划分 17
1.5.4 按工业界应用的复杂程度划分 18
1.6 嵌入式系统基本结构 19
1.6.1 嵌入式硬件组成 19
1.6.2 嵌入式软件组成 20
1.7 嵌入式系统的设计要求 21
1.8 嵌入式应用开发 22
1.8.1 嵌入式系统开发过程 22
1.8.2 嵌入式系统设计 23
1.8.3 嵌入式编程 24
1.8.4 嵌入式系统测试 25
1.8.5 嵌入式软件的重用 26
1.8.6 嵌入式软件开发平台 26
小结 27
习题 28
参考文献 28
第2章 ARM嵌入式微处理器 29
2.1 嵌入式微处理器概述 29
2.1.1 嵌入式硬件系统基本架构 29
2.1.2 嵌入式微处理器的体系结构 30
2.1.3 嵌入式微处理器的分类 32
2.2 ARM嵌入式微处理器体系结构 34
2.2.1 ARM920T的基本结构 34
2.2.2 RISC体系结构 35
2.2.3 AMBA总线 35
2.2.4 工作状态 36
2.2.5 微处理器模式 36
2.2.6 寄存器结构 37
2.2.7 存储系统 39
2.2.8 流水线结构 40
2.2.9 中断和异常 41
2.3 ARM指令系统 42
2.3.1 ARM指令集概述 42
2.3.2 ARM指令寻址方式 44
2.3.3 ARM指令集 46
2.3.4 Thumb指令 58
2.4 基于ARM9的S3C2410X微处理器 58
2.4.1 存储控制器 59
2.4.2 NAND Flash控制器 61
2.4.3 时钟和电源管理 61
2.4.4 I/O端口 65
2.4.5 PWM定时器 66
2.4.6 通用异步收发器 69
2.4.7 中断控制器 71
2.4.8 直接存储器存取 75
2.4.9 LCD控制器 76
小结 77
思考题 77
参考文献 78
第3章 基于ARM的嵌入式系统外围硬件设计 79
3.1 嵌入式微处理器系统硬件设计 80
3.1.1 芯片选型原则 80
3.1.2 电源模块设计 81
3.1.3 时钟模块设计 82
3.1.4 复位电路设计 83
3.2 嵌入式存储器系统设计 84
3.2.1 Flash接口电路设计 84
3.2.2 SDRAM接口电路设计 88
3.3 其他接口设计 91
3.3.1 UART串行接口 91
3.3.2 USB接口电路设计 93
3.3.3 JTAG电路以及调试方式 94
小结 96
思考题 96
参考文献 97
第4章 嵌入式软件体系结构 98
4.1 软件体系结构的基本概念 98
4.2 软件体系结构的作用 99
4.2.1 系统设计计划 99
4.2.2 抽象管理框架 99
4.2.3 特点 100
4.3 软件体系结构的发展历程 100
4.4 通用软件体系结构 101
4.4.1 整体结构 101
4.4.2 层次结构 102
4.4.3 客户机/服务器结构 103
4.5 轮询系统 104
4.5.1 程序结构 104
4.5.2 调度 104
4.5.3 典型系统 106
4.6 前后台系统 107
4.6.1 前台系统的应用 107
4.6.2 运行方式 107
4.6.3 系统性能 108
4.6.4 前后台交互 109
4.6.5 典型系统 109
4.7 实时多任务系统 110
4.7.1 相关概念 110
4.7.2 实时多任务系统与RTOS 111
4.7.3 实时多任务系统的体系结构 111
4.7.4 系统性能 111
4.7.5 典型系统 112
4.8 多处理器系统 113
4.8.1 多处理器系统的分类 113
4.8.2 多处理器系统的应用 114
4.8.3 系统拓扑结构 114
4.8.4 系统性能 115
4.8.5 典型系统 115
小结 116
思考题 116
参考文献 117
第5章 嵌入式实时操作系统 118
5.1 什么是嵌入式操作系统 118
5.2 关键术语 119
5.3 RTOS的特点 121
5.3.1 及时性 121
5.3.2 可确定性 121
5.3.3 并发性 122
5.3.4 高可信性 122
5.3.5 安全性 122
5.3.6 可嵌入性 122
5.3.7 可剪裁性 123
5.3.8 可扩展性 123
5.4 RTOS的体系结构 123
5.4.1 整体结构 123
5.4.2 层次结构 124
5.4.3 微内核结构 125
5.4.4 构件化结构 126
5.4.5 其他体系结构 127
5.5 RTOS的分类 128
5.6 实时内核 129
5.6.1 任务管理 129
5.6.2 任务间的通信 138
5.6.3 中断 139
5.6.4 时钟管理 141
5.6.5 内存管理 142
5.7 RTOS扩展组件 143
5.7.1 嵌入式GUI 143
5.7.2 嵌入式网络 147
5.7.3 嵌入式文件系统 154
5.7.4 嵌入式数据库 157
5.7.5 流媒体支持 160
5.7.6 功耗管理 165
5.7.7 用户接口 168
5.8 典型的RTOS 169
5.8.1 VxWorks 170
5.8.2 QNX 171
5.8.3 Windows CE 172
5.8.4 Embedded Linux 173
5.8.5 Symbian OS 174
5.8.6 TinyOS 175
5.8.7 DeltaOS 176
5.9 RTOS发展趋势 177
小结 178
思考题 179
参考文献 180
第6章 板级支持包与系统引导 182
6.1 嵌入式软件运行过程 182
6.2 板级支持包 183
6.2.1 BSP的概念 184
6.2.2 BSP中的驱动程序 184
6.2.3 BSP和BIOS的区别 185
6.2.4 RTOS的BSP 186
6.3 RTOS的引导模式 188
6.3.1 需要Boot Loader的引导模式 188
6.3.2 不需要Boot Loader的引导模式 188
6.3.3 操作系统引导实例 189
6.4 Boot Loader 192
6.4.1 Boot Loader概念 192
6.4.2 Boot Loader的开发 192
小结 200
思考题 200
参考文献 200
第7章 嵌入式软件设计方法 201
7.1 嵌入式软件工程概述 201
7.1.1 嵌入式软件的生命周期 201
7.1.2 并发任务 203
7.1.3 信息隐藏 203
7.2 嵌入式软件的分类 204
7.3 嵌入式软件的特点 205
7.3.1 实时性 205
7.3.2 异步事件的并发处理 205
7.3.3 应用/操作系统一体化 205
7.3.4 应用可固化 206
7.3.5 实用性 206
7.3.6 适用性 206
7.3.7 鲁棒性 206
7.3.8 够用即可 206
7.3.9 安全性 207
7.4 嵌入式软件设计方法 207
7.4.1 嵌入式软件开发过程 207
7.4.2 常规设计方法 214
7.4.3 实时多任务设计方法 222
7.4.4 一些新的设计方法 237
7.5 嵌入式软件设计的一些基本原则 241
7.5.1 尽量简单 241
7.5.2 使用静态表 242
7.5.3 尽量减少动态性 244
7.5.4 恰当的任务数目 245
7.5.5 避免使用复杂算法 245
7.5.6 使用有限状态自动机辅助设计 246
7.5.7 面向对象设计 246
小结 247
思考题 247
参考文献 247
第8章 嵌入式软件编程 248
8.1 概述 248
8.2 嵌入式程序设计语言 249
8.3 汇编语言 250
8.3.1 GAS的基本风格 250
8.3.2 与AT&T的差异 253
8.4 C语言 254
8.4.1 gcc扩展 255
8.4.2 C51扩展 259
8.4.3 浮点运算支持 268
8.5 C语言与汇编语言混合编程 269
8.5.1 在线汇编 269
8.5.2 C语言与汇编语言的混合调用 271
8.6 嵌入式Java 273
8.6.1 Java发展概况 273
8.6.2 Java技术框架 274
8.6.3 嵌入式Java程序设计 276
8.6.4 嵌入式Java的相关问题 278
8.6.5 嵌入式Java的典型应用 279
8.7 编程规范 280
8.7.1 模块划分和文件组织 281
8.7.2 源文件 281
8.7.3 头文件 284
8.7.4 程序书写规范 284
8.7.5 数据类型 285
8.7.6 命名方法 286
8.7.7 表达式和基本语句 287
8.7.8 内存使用 288
小结 289
思考题 289
参考文献 289
第9章 嵌入式软件开发环境 291
9.1 概述 291
9.2 交叉开发技术 292
9.2.1 常用的交叉开发方法 292
9.2.2 交叉开发过程 297
9.2.3 交叉开发环境 299
9.3 仿真开发技术 300
9.3.1 仿真开发的分类 301
9.3.2 仿真开发过程 303
9.3.3 仿真开发环境 304
9.3.4 仿真开发环境的特点 305
9.4 开发环境提供的主要工具 306
9.4.1 项目管理 306
9.4.2 配置剪裁 306
9.4.3 源码编辑 307
9.4.4 目标代码编译生成 307
9.4.5 交叉调试 309
9.4.6 测试工具 313
9.4.7 版本管理工具 315
9.5 GNU的嵌入式开发环境 317
9.5.1 gcc编译器 317
9.5.2 make 321
9.5.3 gdb调试器 325
9.6 Wind River System公司开发的集成开发环境 332
9.7 仿真开发工具ARMulator 335
小结 336
思考题 337
参考文献 337
第10章 嵌入式系统可靠性测试与评估 339
10.1 软件测试与可靠性评估 339
10.1.1 软件测试相关概念 339
10.1.2 软件可靠性评估相关概念 341
10.1.3 软件测试与软件可靠性评估的关系 345
10.2 嵌入式软件测试 345
10.2.1 嵌入式软件的测试阶段 346
10.2.2 嵌入式软件测试工具分类 346
10.2.3 有限状态机测试模型 347
10.2.4 CodeTEST测试工具 348
10.3 软件可靠性测试 351
10.3.1 软件可靠性测试概述 351
10.3.2 软件可靠性测试的过程 352
10.3.3 软件可靠性测试方法 353
10.4 嵌入式软件的可靠性测试与评估 355
10.4.1 嵌入式软件可靠性测试特点 355
10.4.2 嵌入式软件可靠性测试方法 356
10.4.3 嵌入式实时软件可靠性评估 358
10.5 嵌入式系统可靠性评价 360
10.6 嵌入式系统可靠性相关技术的进展 361
小结 362
思考题 362
参考文献 362
第11章 前沿技术简介 364
11.1 SoC技术 364
11.1.1 SoC的产生 364
11.1.2 SoC的定义 365
11.1.3 IP核的概念与分类 366
11.1.4 SoC设计特点 368
11.1.5 SoC设计方法 369
11.1.6 SoC验证方法 374
11.1.7 SoPC技术 379
11.1.8 SoC的挑战和发展趋势 381
11.2 嵌入式高可信计算技术 383
11.2.1 可信的起源与内涵 383
11.2.2 可信性的基本特征属性 384
11.2.3 导致可信性降低的主要因素 385
11.2.4 防危性、可靠性与安全性的概念及三者之间的异同 387
11.2.5 现有的高可信保障技术 389
11.2.6 防危核与防危壳技术 391
小结 393
思考题 393
参考文献 394