第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.1SoC 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、SPI1-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 12C总线 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支持Intemet的系统——网络协议 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章 实时操作系统Ⅰ:进程间通信与进程、任务和线程的同步 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章 实时操作系统Ⅱ: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-Ⅱ和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-Ⅱ (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