第1章 嵌入式系统简介 1
1.1 嵌入式系统 2
1.1.1 系统 2
1.1.2 嵌入式系统 2
1.1.3 嵌入式系统和通用计算系统 3
1.2 嵌入系统中的处理器 5
1.2.1 微处理器 5
1.2.2 微控制器 6
1.2.3 ARM 8
1.2.4 RISC 8
1.2.5 CISC 9
1.2.6 SoC 9
1.2.7 数字信号处理器(DSP) 9
1.2.8 专用处理器 9
1.3 系统中的嵌入式硬件
单元和设备 11
1.3.1 构建块 11
1.3.2 嵌入板 16
1.4 嵌入式系统中的软件和
编程语言概述 16
1.4.1 嵌入式软件ROM映像 16
1.4.2 用机器码编写软件 17
1.4.3 用特定于处理器的汇编
语言编写软件 18
1.4.4 用高级语言编写软件 18
1.5 嵌入式系统的设计过程 20
1.6 嵌入式系统的体系结构 21
1.7 嵌入式系统的模型 22
1.8 嵌入式系统的分类 24
1.9 嵌入式系统设计者需要
具备的技能 25
1.10 示例嵌入式系统 26
本章小结 28
关键词及其定义 28
复习题 32
实践练习题 33
第2章 嵌入式系统的设计和开发过程 35
2.1 嵌入式片上系统(SoC)和
VLSI电路设计技术 36
2.1.1 SoC 36
2.1.2 VLSI电路设计技术 38
2.1.3 SoC或VLSI设计中
使用的ASIC 38
2.1.4 IP核 38
2.1.5 多个处理器 39
2.2 复杂系统设计和处理器 39
2.2.1 复杂系统和微处理器 39
2.2.2 使用嵌入式处理器构建
复杂系统 43
2.3 嵌入式系统的构建过程 44
2.4 嵌入式系统的设计过程 44
2.4.1 设计过程中使用的概念 44
2.4.2 软件设计过程 45
2.4.3 设计指标 46
2.4.4 设计过程中的抽象步骤 47
2.5 嵌入式系统设计中的挑战 48
2.6 嵌入式系统设计中的挑战:
优化设计指标 49
2.7 嵌入式软件开发的
挑战和问题 51
2.8 嵌入式系统中软硬件的
协同设计 52
2.8.1 软硬件的权衡 54
2.8.2 嵌入式系统中软硬件协同设
计的挑战:优化设计指标 54
2.9 嵌入式系统的设计技术 54
2.9.1 IC技术 54
2.9.2 VLSI技术 56
2.10 系统设计的形式化 56
2.11 设计过程和设计案例 57
2.11.1 巧克力自动售卖机(ACVM) 57
2.11.2 智能卡 59
2.11.3 数码相机 62
本章小结 64
关键词及其定义 65
复习题 66
实践练习题 67
第3章 8051、AVR和ARM微控制器、
现实中的接口和I/O总线 69
3.1 微控制器和微处理器简介 70
3.2 嵌入式和外部存储器设备 70
3.3 微控制器-8051的体系结构 71
3.3.1 8051微控制器的硬件
体系结构 71
3.3.2 ATMEL 89x51系列微控制器
硬件体系结构 72
3.3.3 ATMEL 90Sxx系列 73
3.3.4 指令集 73
3.3.5 IO端口、电路以及IO编程 76
3.3.6 外部存储器接口电路 77
3.3.7 计数器和定时器 78
3.3.8 串行数据通信输入/输出 79
3.3.9 8051中的中断 80
3.4 ATMEL AVR微控制器 80
3.5 ARM微控制器 82
3.6 计算机系统总线 83
3.6.1 CPU/微处理器系统总线 83
3.6.2 存储器设备接口 86
3.7 现实的接口 88
3.7.1 现实接口电路中的设备地址 88
3.7.2 I/O设备和组件的连接 89
3.7.3 I/O:管理数据 90
3.7.4 串行和并行I/O 91
3.7.5 设备中断和IO 93
3.8 I/O性能 93
3.9 I/O总线 94
3.9.1 总线仲裁 95
3.9.2 菊花链方式 96
3.9.3 独立总线请求方式 96
3.9.4 总线轮询方式 97
3.10 面向网络的总线仲裁 97
3.11 总线 98
3.11.1 体系结构:单层、双层和
多层 98
3.11.2 仲裁:集中式和分布式 98
3.11.3 定时 99
3.11.4 总线性能 100
3.12 多级总线 100
本章小结 101
关键词及其定义 102
复习题 105
实践练习题 105
第4章 高级体系结构和处理器-
存储器的组织 107
4.1 处理器和存储器组织 108
4.1.1 Harvard存储器体系结构 108
4.1.2 Von Neumann(Princeton)
存储器体系结构 110
4.1.3 Harvard体系结构的
存储器接口电路 110
4.1.4 通用存储器接口电路 110
4.2 高级处理器体系结构介绍 111
4.2.1 处理器中的结构单元 112
4.2.2 高级处理器体系结构 113
4.3 处理器的组织 115
4.3.1 处理器组织方式:处理器的
CISC设计 115
4.3.2 处理器组织方式:处理器的
RISC设计 116
4.4 指令级并行性 117
4.5 INTEL x86体系结构(8086、
80386、80486和奔腾) 119
4.5.1 80386的体系结构 120
4.5.2 80486的体系结构 120
4.5.3 奔腾P5(80586)和P6的
体系结构 120
4.6 ARM 120
4.7 SHARC 122
4.8 存储器类型和地址 124
4.8.1 合并存储器 124
4.8.2 嵌入式存储器 126
4.8.3 ROM变种 126
4.8.4 RAM、SRAM和DRAM 128
4.8.5 闪存 129
4.8.6 闪存卡 130
4.9 存储器地址 130
4.9.1 将内存分配给程序段和块 130
4.9.2 存储器映射 130
4.10 存储器层次结构和缓存 131
4.11 性能指标 132
4.11.1 处理器的性能 133
4.11.2 存储器的性能 133
4.11.3 嵌入式系统的性能 133
4.12 处理器和存储器设备的
选择 134
4.12.1 处理器的选择 134
4.12.2 处理器或微控制器版本的
选择 134
4.12.3 微控制器版本的选择 135
本章小结 135
关键词及其定义 136
复习题 138
实践练习题 139
第5章 IO设备、通信总线和分布式
联网的嵌入式体系结构 141
5.1 I/O的类型和示例 142
5.1.1 同步串行输入 143
5.1.2 同步串行输出 144
5.1.3 同步串行输入/输出 144
5.1.4 异步串行输入 144
5.1.5 异步串行输出 145
5.1.6 半双工与全双工 145
5.1.7 串行I/O示例 145
5.1.8 并口 146
5.1.9 串并输出和输入 146
5.1.10 并行IO的示例 146
5.2 串行通信设备 147
5.2.1 串行设备的同步、准同步
和异步通信 147
5.2.2 UART模式(协议)异步
串行通信 148
5.2.3 IBM PC COM端口上的
串行RS232C通信 150
5.2.4 HDLC协议 151
5.2.5 同步串行数据通信的SPI
端口 152
5.2.6 异步UART串行数据
通信的SCI端口 153
5.2.7 同步和异步串行数据
通信的串行接口(SI) 153
5.2.8 SDIO、SPI 1-SD和4-SD
数据通信 154
5.3 并行设备端口 155
5.3.1 与开关和小键盘连接的
并行端口 156
5.3.2 与编码器连接的并行端口 157
5.3.3 与步进电机连接的
并行端口 158
5.3.4 与LCD控制器连接的
并行端口 158
5.3.5 与触摸屏连接的并行端口 159
5.4 设备端口的复杂接口特性 159
5.5 无线设备 160
5.6 定时器和计数设备 160
5.6.1 定时设备 161
5.6.2 计数设备 161
5.6.3 带计数设备的定时器 161
5.6.4 两个实例之间的时间间隔 161
5.6.5 预设时间的输出动作 161
5.6.6 软件定时器 162
5.6.7 watchdog定时器 162
5.6.8 实时时钟 162
5.7 分布式网络嵌入式
系统结构 163
5.7.1 总线的优点 163
5.7.2 总线的缺点 164
5.8 串行总线通信协议 164
5.8.1 I2C总线 165
5.8.2 CAN总线 166
5.8.3 USB总线 168
5.8.4 FireWire—— IEEE 1394
总线标准 169
5.8.5 先进的串行高速总线 170
5.9 并行总线设备协议——
使用ISA、PCI、PCI-X 和
高级总线的并行通信网络 170
5.9.1 ISA和EISA总线 171
5.9.2 PCI和PCI/X总线 171
5.9.3 ARM总线 173
5.9.4 高级并行高速总线 174
5.10 支持Internet的系统——
网络协议 174
5.10.1 超文本传输协议(HTTP) 175
5.10.2 传输控制协议(TCP) 176
5.10.3 用户数据报协议(UDP) 176
5.10.4 Internet协议(IP) 176
5.10.5 Ethernet(以太网) 177
5.11 无线和移动系统协议 177
5.11.1 红外数据协会(IrDA) 177
5.11.2 蓝牙 178
5.11.3 802.11 179
5.11.4 ZigBee 180
本章小结 180
关键词及其定义 181
复习题 185
实践练习题 186
第6章 设备驱动程序和中断
服务机制 189
6.1 不使用中断服务机制的
编程式I/O的设备访问
端口 189
6.1.1 Intel I/O结构 192
6.1.2 同步 193
6.1.3 传输率 194
6.1.4 延迟 194
6.2 中断驱动的输入输出 195
6.3 ISR的概念 196
6.4 中断源 197
6.5 硬件中断 198
6.6 软件中断 199
6.6.1 异常和异常处理程序 200
6.6.2 信号和信号处理程序 201
6.7 中断服务机制 202
6.7.1 阻止中断的溢出 202
6.7.2 禁用中断 203
6.7.3 不可屏蔽的中断和可
屏蔽的中断 203
6.7.4 中断状态寄存器或中
断挂起寄存器 204
6.7.5 中断向量 204
6.8 多中断 206
6.8.1 多中断调用 206
6.8.2 硬件分配的优先级 206
6.8.3 软件重写硬件优先级,以
满足服务的最后期限 207
6.8.4 启用和禁用中断,重写硬件
优先级,以满足服务的最后
期限 207
6.9 中断服务线程作为二级
中断处理程序 207
6.10 上下文和上下文切换周期 208
6.11 中断延迟 210
6.12 中断服务的最终期限 211
6.13 从上下文保存的角度对处理
器中断服务机制的分类 211
6.14 直接存储器访问
驱动的I/O 212
6.14.1 DMA 212
6.14.2 同一中断源生成多个快速
连续中断时的DMA通道
使用 212
6.14.3 DMA控制器 212
6.15 设备驱动程序编程 214
6.15.1 编写系统中的物理设备
驱动ISR 215
6.15.2 操作系统中的设备驱动
程序组件 215
6.15.3 用系统软件函数模拟
物理设备 215
6.15.4 作为设备驱动和网络
函数的Linux 内幕 216
本章小结 217
关键词及其定义 218
复习题 220
实践练习题 221
第7章 编程概念及C、C++和
Java的嵌入式编程 223
7.1 用汇编语言(ALP)和高级
语言C进行软件编程 224
7.1.1 汇编语言编程 224
7.1.2 高级语言编程 224
7.2 C程序中的元素:头文件、
源文件以及预处理指令 225
7.2.1 用于包含文件的include
指令 226
7.2.2 源文件 227
7.2.3 配置文件 227
7.2.4 预处理指令 227
7.3 程序元素:宏与函数 227
7.4 程序元素:数据类型、数据
结构、修饰符、语句、循环
和指针 229
7.4.1 数据类型 229
7.4.2 修饰符的使用 230
7.4.3 指针和NULL指针 230
7.4.4 使用数据结构:堆栈、队列、
数组、链表、树、管道、表
格和哈希表 230
7.4.5 堆栈 232
7.4.6 多个堆栈 232
7.4.7 数组 233
7.4.8 队列 233
7.4.9 链表 234
7.4.10 循环队列 234
7.4.11 优先队列 235
7.4.12 管道 235
7.4.13 表和哈希表 236
7.5 循环、无限循环以及条件
语句 237
7.6 函数调用 242
7.7 按照循环顺序进行的
多函数调用 242
7.8 函数指针和函数队列 244
7.9 发生中断时函数的排列和
中断服务例程队列 245
7.10 嵌入式C和C++:其他
功能 246
7.10.1 编译器和优化 247
7.10.2 编程和汇编 248
7.10.3 寄存器的使用约定 248
7.10.4 寻址选项和指令序列的
典型用法 249
7.10.5 过程调用和返回 250
7.10.6 参数的传递 250
7.10.7 检索参数 250
7.10.8 按值传递的临时变量 251
7.11 面向对象编程 251
7.12 C++嵌入式编程 251
7.12.1 C++的优点 251
7.12.2 C++的缺点 252
7.13 嵌入式C++程序的代码
优化以消除缺点 253
7.14 用Java进行嵌入式编程 253
7.14.1 Java编程基础 253
7.14.2 使用Java编程的优点 255
7.14.3 Java的缺点 255
本章小结 255
关键词及其定义 256
复习题 259
实践练习题 259
第8章 程序建模的概念 261
8.1 程序模型 262
8.2 基于数据流图的程序模型 265
8.2.1 数据流图 266
8.2.2 控制数据流图模型 267
8.2.3 同步数据流图(SDFG)模型 269
8.3 用于事件控制程序的
状态机编程模型 270
8.3.1 状态机编程模型 270
8.3.2 有限状态机(FSM)模型 271
8.3.3 FSM状态表 272
8.4 多处理器系统的建模 275
8.4.1 多处理器系统 275
8.4.2 图在多处理器系统中的
应用:划分和调度 278
8.5 UML建模 279
本章小结 283
关键词及其定义 284
复习题 285
实践练习题 285
第9章 实时操作系统I:进程间通信与
进程、任务和线程的同步 287
9.1 应用程序中的多个进程 288
9.1.1 进程 288
9.1.2 进程控制块(PCB) 289
9.1.3 进程上下文 289
9.2 应用程序中的多线程 290
9.2.1 进程的多个线程 290
9.2.2 多线程的编程 290
9.2.3 抢占式和非抢占式 291
9.3 任务 291
9.4 任务和线程状态 292
9.4.1 调度线程和线程状态 292
9.4.2 挂起的线程 293
9.4.3 上下文切换 293
9.5 任务和数据 294
9.5.1 上下文 294
9.5.2 上下文切换 295
9.5.3 任务控制块 295
9.5.4 无限事件等待循环的
任务编码 295
9.6 通过函数、ISR、IST和
任务的特征进行区分 296
9.7 进程间通信和同步 297
9.8 信号函数 298
9.9 信号量的概念 300
9.9.1 OS的信号量IPC函数 300
9.9.2 作为事件信号变量或
通报变量的信号量的使用 301
9.9.3 作为资源键的信号量以及
信号量在临界段中的使用 302
9.9.4 使用多个信号量同步任务 304
9.9.5 多个任务等待同一信号量 306
9.9.6 计数信号量 307
9.9.7 P和V信号量 307
9.10 禁用和启用函数 312
9.10.1 禁用和启用中断 312
9.10.2 锁定和解锁函数 312
9.11 共享数据问题 313
9.11.1 多任务和多中断服务
例程的数据共享问题 313
9.11.2 共享数据问题的解决
方法 314
9.11.3 优先级反转问题和
优先级继承 315
9.11.4 死锁情况 316
9.12 队列和邮箱 316
9.12.1 队列 316
9.12.2 邮箱 318
9.13 管道和套接字 321
9.13.1 管道 321
9.13.2 套接字 323
9.14 远程过程调用(RPC)函数 326
本章小结 326
关键词及其定义 327
复习题 328
实践练习题 329
第10章 实时操作系统II:OS和
RTOS的基本功能 331
10.1 OS服务 332
10.1.1 OS服务目标 332
10.1.2 用户和管态结构 332
10.1.3 结构 333
10.1.4 内核 333
10.2 进程管理 334
10.3 定时器函数 334
10.4 事件函数 336
10.5 存储器管理 336
10.6 设备、文件及IO子
系统管理 337
10.6.1 设备管理 337
10.6.2 文件系统的组织和实现 339
10.6.3 I/O子系统 342
10.7 RTOS环境中的中断
例程和中断源调用处理 342
10.7.1 通过中断源以及ISR
发送ISR输入消息直接
调用ISR 343
10.7.2 RTOS首先响应中断,
接着OS调用相应的ISR 343
10.7.3 RTOS首先响应中断,调用
对应的ISR,之后ISR把消
息发送给中断服务线程 344
10.7.4 通过ISR接收IPC事件 345
10.8 实时操作系统 345
10.9 使用RTOS进行基本设计 346
10.9.1 RTOS基本设计原则:
15个设计策略 347
10.9.2 节约存储器和功耗 350
10.10 RTOS任务调度模型 353
10.11 操作系统的安全问题 354
10.12 OS标准:POSIX 354
10.12.1 IEEE标准POSIX 1003.1b
的RTOS标准化和进程
间通信函数 355
10.12.2 IEEE标准POSIX 1003.1b
的IO函数 356
10.12.3 IEEE标准POSIX 1003.1b
的文件函数 356
10.13 作为性能指标的中断
延迟和任务响应时间 356
10.13.1 周期、突发以及非周期
任务的调度模型中延迟和
最后期限的性能指标 356
10.13.2 使用CPU负载作为
性能指标 357
10.13.3 突发任务模型作为性能
指标 357
10.14 OS性能准则 358
10.15 中间件:含义和示例 358
10.16 应用层软件:含义和
例子 358
本章小结 359
关键词及其定义 360
复习题 360
实践练习题 361
第11章 实时操作系统编程:
MicroC/OS-II和VxWorks 363
11.1 RTOS 364
11.1.1 RTOS中的基本函数 364
11.1.2 当前的实时操作系统 365
11.1.3 RTOS的类型 365
11.1.4 实时系统的基准简介 367
11.2 μC/OS-II (MUCOS) 367
11.2.1 系统级函数 369
11.2.2 任务服务函数 374
11.2.3 与存储器分配相关的
函数 381
11.2.4 信号量相关函数 384
11.2.5 邮箱相关函数 388
11.2.6 队列相关函数 393
11.3 基于UNIX的实时操作
系统 398
11.3.1 pSOS 398
11.3.2 VrTx 398
11.3.3 QNX RTOS 398
11.4 RTOS VxWorks 399
11.4.1 基本特性 400
11.4.2 系统库头文件中的任务
管理库 402
11.4.3 VxWorks系统函数和
系统任务 405
11.4.4 IPC函数 408
本章小结 419
关键词及其定义 421
复习题 422
实践练习题 423
第12章 实时Linux、Windows CE、
OSEK、手持设备和汽车操作
系统 425
12.1 POSIX兼容操作系统 426
12.2 实时Linux 操作系统 426
12.2.1 用于嵌入式系统的Linux——
嵌入式Linux 426
12.2.2 RTLinux 431
12.3 Windows CE 435
12.3.1 Windows CE的特点 436
12.3.2 Windows CE编程 438
12.3.3 窗口和窗口管理 439
12.3.4 内存管理 439
12.3.5 文件和注册表 440
12.3.6 Windows CE数据库 441
12.3.7 进程、线程和IPC 442
12.3.8 按键、触摸屏、鼠标的
输入 445
12.3.9 通信和网络 446
12.3.10 设备间套接字通信函数 448
12.3.11 创建窗口 449
12.3.12 Win32 API编程 449
12.3.13 嵌入式系统的Windows 8
和Windows Embedded
Compact 2013 451
12.4 OSEK 451
本章小结 453
关键词及其定义 455
复习题 458
实践练习题 459
第13章 RTOS编程和程序建模设
计示例与案例研究 461
13.1 嵌入式系统设计的案例研究以
及使用MUCOS RTOS对巧克
力自动售卖机(ACVM)编码 462
13.1.1 需求 462
13.1.2 规范 463
13.1.3 使用UML为规范建模 464
13.1.4 ACVM的硬件体系结构 467
13.1.5 软件体系结构 468
13.2 数码相机的案例研究 470
13.2.1 需求 470
13.2.2 类图 473
13.2.3 数码相机的硬件体系
结构 474
13.2.4 数码相机的软件体系
结构 475
13.3 给IP包应用通信网络
路由器 477
13.3.1 使用VxWorks将应用层
字节流发送到TCP/IP网络
的编码案例研究 477
13.3.2 需求 477
13.3.3 类图、类和对象 478
13.4 管弦乐队机器人之间通信的
案例研究 483
13.4.1 需求 485
13.4.2 类和类图 486
13.4.3 状态图 488
13.4.4 机器人管弦乐队MIDI通信
的硬件和软件体系结构 488
13.5 汽车中的嵌入式系统 489
13.6 汽车中自适应巡航控制(ACC)
系统的嵌入式系统案例研究 490
13.6.1 需求 491
13.6.2 类图 495
13.6.3 ACC硬件体系结构 496
13.6.4 ACC软件体系结构 497
13.6.5 ACC软件任务、同步模型
和实现 497
13.7 汽车中嵌入式编程的一般语
言特征、MISRA-C的特征 497
13.8 智能卡中的嵌入式系统
案例研究 498
13.8.1 需求 498
13.8.2 类图 499
13.8.3 硬件和软件体系结构 500
13.8.4 同步模型 501
13.9 移动电话键输入软件
案例研究 502
13.9.1 需求 503
13.9.2 类和类图 507
13.9.3 状态图 509
13.9.4 SMS按键硬件 509
本章小结 510
关键词及其定义 512
复习题 515
实践练习题 516
第14章 嵌入式软件开发过程和工具 519
14.1 嵌入式软件开发过程和
工具概述 519
14.1.1 开发过程和软硬件 519
14.1.2 软件工具 520
14.1.3 源代码工程管理工具 521
14.1.4 集成开发环境(IDE) 522
14.2 宿主机和目标机 523
14.2.1 宿主系统 523
14.2.2 目标系统 525
14.3 链接和定位软件 526
14.3.1 文件、寻址和地址解决
方法的区别 527
14.3.2 Motorola S-record和Intel Hex
二进制映像格式的定位器
输出文件 528
14.3.3 用于定位器编码的存储器
映射 528
14.4 将嵌入式软件植入目标系统 530
14.4.1 设备PROM或者闪存
编程器 530
14.4.2 设备编程器的编程方式 531
14.5 硬件/软件设计和协同
设计中的问题 531
14.5.1 选择合适的平台 532
14.5.2 存储器敏感和处理器敏感
软件 535
14.5.3 存储器、程序段和设备
地址分配 535
14.5.4 嵌入式平台中OS的移植
问题 538
14.6 程序级别的性能分析和
性能建模 539
14.6.1 程序级别的性能分析和
系统性能指标 539
14.6.2 多处理器系统性能 539
14.6.3 MIP、MFLOP和DMIPS
作为性能指标 539
14.7 性能和性能加速器 540
本章小结 540
关键词及其定义 541
复习题 543
实践练习题 543
第15章 测试、模拟和调试技术与
工具 545
15.1 集成和测试嵌入式硬件 545
15.1.1 测试嵌入式系统 546
15.1.2 可测试性的设计 547
15.1.3 断言宏 547
15.1.4 自测的设计 547
15.1.5 在宿主机上进行测试 548
15.2 测试方法 548
15.2.1 错误跟踪 548
15.2.2 单元测试 549
15.2.3 回归测试 549
15.2.4 选择测试用例 549
15.2.5 功能测试 550
15.2.6 覆盖测试 550
15.2.7 测试嵌入式软件 550
15.2.8 性能测试 551
15.2.9 维护 551
15.3 调试技术 551
15.3.1 模拟器 551
15.3.2 模拟器的特性 552
15.3.3 模拟器的局限性 552
15.3.4 模拟工具软件 553
15.3.5 嵌入式系统的原型开发、
测试和调试工具 553
15.4 试验工具和目标硬件的调试 554
15.4.1 简单的伏特-欧姆表 554
15.4.2 简单的LED测试和逻辑
探测器 555
15.4.3 示波器 555
15.4.4 位率测量仪 556
15.4.5 逻辑分析仪 556
15.4.6 电路内置仿真器(ICE) 557
15.4.7 监视器 559
本章小结 560
关键词及其定义 560
复习题 561
实践练习题 561
附录A 大学生、研究生、专业
培训学生的不同课程的学习
路线图 563
附录B 参考文献 565