第1章 嵌入式系统简介 1
1.1嵌入式系统 2
1.1.1系统 2
1.1.2嵌入式系统 3
1.2嵌入系统中的处理器 5
1.2.1系统中的处理器 5
1.2.2微处理器 6
1.2.3微控制器 7
1.2.4专用处理器 9
1.3系统中的嵌入式硬件单元和设备 10
1.3.1电源 10
1.3.2时钟振荡电路和时钟单元 11
1.3.3系统定时器和实时时钟 11
1.3.4复位电路、加电复位和Watchdog定时器复位 11
1.3.5存储器 12
1.3.6输入、输出和I/O端口,1O总线和1O接口 14
1.3.7 DAC(使用PWM)和ADC 15
1.3.8 LCD、 LED和触摸屏显示 17
1.3.9小键盘或键盘 18
1.3.10脉冲拨号电路、调制解调器和收发器 18
1.3.11中断处理器 18
1.4嵌入式系统中的软件 19
1.4.1系统的最终机器可实现软件 19
1.4.2用机器码编写软件 20
1.4.3用特定于处理器的汇编语言编写软件 21
1.4.4用高级语言编写软件 22
1.4.5软件设计的程序模型 24
1.4.6并行处理、多任务调度和使用RTOS的ISR的软件 24
1.4.7使用操作系统的设备驱动程序和设备管理软件 25
1.4.8设计嵌入式系统的软件工具 26
1.4.9示例中需要的软件工具 27
1.5示例嵌入式系统 28
1.6嵌入式片上系统(SoC)和VLSI电路设计技术 30
1.6.1专用IC(ASIC) 31
1.6.2 IP核 32
1.6.3具有一个或者多个处理器的FPGA核 32
1.7复杂系统设计和处理器 32
1.7.1嵌入式系统中的微处理器 32
1.7.2嵌入式系统中的微控制器 33
1.7.3嵌入式系统中的DSP 33
1.7.4嵌入式系统中的RISC 34
1.7.5嵌入式系统中的ASIP 34
1.7.6 嵌入式系统中的多处理器或者GPP双核处理器 34
1.7.7嵌入式处理器和嵌入式微控制器 35
1.7.8 嵌入式系统中的ARM处理器 37
1.7.9嵌入式系统中的ASSP 37
1.8嵌入式系统的设计过程 38
1.8.1设计指标 39
1.8.2设计过程中的抽象步骤 39
1.8.3嵌入式系统设计中的挑战:优化设计指标 42
1.9系统设计的形式化方法 43
1.10设计过程和设计案例 44
1.10.1系统设计过程案例 44
1.10.2巧克力自动售卖机(ACVM) 44
1.10.3智能卡 46
1.10.4数码相机 49
1.10.5移动电话 51
1.10.6便携式计算机 52
1.10.7一组机器人 52
1.11嵌入式系统的分类 54
1.12嵌入式系统设计者需要具备的技能 55
本章 小结 56
关键词及其定义 57
问题回顾 61
实践练习 62
第2章 8051和高级处理器体系结构、存储器组织和现实中的接口 65
2.1 8051的体系结构 66
2.1.1 8051微控制器体系结构 66
2.1.2指令集 67
2.1.3 IO端口、电路以及IO编程 70
2.1.4外部存储器接口电路 72
2.1.5计数器和定时器 73
2.1.6串行数据通信输入/输出 74
2.1.7 8051的中断 75
2.2现实世界中的接口 76
2.2.1基于系统总线和基于IO总线的现实世界接口IO 76
2.2.2现实接口中的端口和设备的IO地址 80
2.2.3现实接口中的设备地址 82
2.2.4中断和IO 83
2.2.5总线仲裁 84
2.2.6键盘、显示器、A/D和D/A转换设备接口示例 86
2.3高级体系结构介绍 88
2.3.1高级处理器体系结构 90
2.3.2 80x86体系结构 92
2.3.3 ARM 93
2.3.4 SHARC 99
2.3.5 DSP 101
2.4处理器和存储器组织 102
2.4.1处理器的组织 102
2.4.2存储器的组织 105
2.5指令级并行 109
2.6性能指标 111
2.7存储器类型、存储器映射和地址 111
2.7.1系统中的存储器 111
2.7.2存储地址分配 115
2.8处理器选择 119
2.9存储器选择 123
本章 小结 126
关键词及其定义 127
问题回顾 132
实践练习 132
第3章 设备网络的设备和通信总线 135
3.1 I/O的类型和示例 136
3.1.1同步串行输入 136
3.1.2同步串行输出 138
3.1.3同步串行输入/输出 138
3.1.4异步串行输入 138
3.1.5异步串行输出 139
3.1.6并行端口 139
3.1.7半双工与全双工 139
3.1.8串行和并行端口I/O示例 140
3.2串行通信设备 140
3.2.1串行设备的同步、准同步和异步通信 140
3.2.2 RS232C/RS485通信 143
3.2.3 UART 144
3.2.4 HDLC协议 145
3.2.5使用SPI、 SCI和SI端口的串行数据通信 146
3.2.6安全数字输入输出(SDIO) 149
3.3并行设备端口 150
3.3.1与开关和小键盘连接的并行端口 153
3.3.2与编码器连接的并行端口 154
3.3.3与步进电机连接的并行端口 154
3.3.4与LCD控制器连接的并行端口 155
3.3.5与触摸屏连接的并行端口 156
3.4设备端口的复杂接口特性 157
3.5无线设备 158
3.6定时器和计数设备 159
3.6.1定时设备 159
3.6.2计数设备 159
3.6.3带计数设备的定时器 160
3.7 watchdog定时器 164
3.8实时时钟 165
3.9网络中的嵌入式系统 166
3.10串行总线通信协议 168
3.10.1 I2C总线 168
3.10.2 CAN总线 169
3.10.3 USB总线 171
3.10.4 FireWire——IEEE1394总线标准 172
3.10.5先进的串行高速总线 173
3.11并行总线设备协议——使用ISA、PCI、PCI-X和高级总线的并行通信网络 173
3.11.1 ISA总线 175
3.11.2 PCI和PCI/X总线 176
3.11.3 ARM总线 177
3.11.4高级并行高速总线 178
3.12支持Internet的系统——网络协议 178
3.12.1超文本传输协议(HTTP) 179
3.12.2传输控制协议(TCP) 181
3.12.3用户数据报协议(UDP) 181
3.12.4 Internet协议(IP) 182
3.12.5 Ethernet(以太网) 183
3.13无线和移动系统协议 184
3.13.1红外数据协会(IrDA) 184
3.13.2蓝牙 185
3.13.3 802.11 186
3.13.4 ZigBee 187
本章小结 187
关键词及其定义 189
问题回顾 192
实践练习 193
第4章 设备驱动程序和中断服务机制 195
4.1不使用中断服务机制的程序查询式I/O忙/等待方法 196
4.2 ISR的概念 198
4.2.1端口或设备中断及ISR示例 199
4.2.2软件中断和ISR示例 202
4.2.3作为级中断处理程序的中断服务线程 205
4.2.4设备驱动程序 205
4.3中断源 206
4.4中断服务(处理)机制 210
4.4.1中断向量 210
4.4.2根据可屏蔽和不可屏蔽的中断分类 213
4.4.3可屏蔽中断源的启用(未屏蔽)和禁用(屏蔽) 214
4.4.4状态寄存器或中断挂起寄存器 214
4.5多中断 215
4.5.1多中断调用 215
4.5.2硬件分配的优先级 216
4.6上下文和上下文切换周期、中断延迟和最终期限 217
4.6.1中断延迟 219
4.6.2中断服务的最终期限 221
4.6.3硬件优先级的软件覆盖以满足服务的最终期限 223
4.7从上下文保存的角度对处理器中断服务机制的分类 223
4.8直接存储器访问 224
4.8.1 DMAC的使用 225
4.8.2同一中断源产生多个快速连续中断时的DMA通道使用 226
4.9设备驱动程序编程 226
4.9.1编写系统中的物理设备驱动ISR 227
4.9.2虚拟设备驱动程序 229
4.9.3系统中的并行端口驱动程序 230
4.9.4系统中的串行端口驱动程序 232
4.9.5内部可编程定时设备的设备驱动程序 234
4.9.6作为设备驱动和网络函数的Linux内幕 235
本章 小结 236
关键词及其定义 237
问题回顾 239
实践练习 240
第5章 编程概念及C、 C+和Java的嵌入式编程 241
5.1用汇编语言(ALP)和高级语言C进行软件编程 242
5.1.1汇编语言编程 242
5.1.2高级语言编程 242
5.2 C程序中的元素:头文件、源文件以及预处理指令 244
5.2.1用于包含文件的include指令 244
5.2.2源文件 245
5.2.3配置文件 246
5.2.4预处理指令 246
5.3程序元素:宏与函数 246
5.4程序元素:数据类型、数据结构、修饰符、语句、循环和指针 248
5.4.1数据类型 248
5.4.2指针和NULL指针 249
5.4.3使用数据结构:队列、堆栈、链表和树 250
5.4.4修饰符的使用 258
5.4.5条件语句、循环语句以及无限循环语句 259
5.4.6函数调用 264
5.4.7按照循环顺序进行的多函数调用 266
5.4.8函数指针、函数队列和ISR队列 267
5.4.9发生中断时函数的排列 268
5.5面向对象编程 270
5.6 C++嵌入式编程 271
5.6.1 C+++的优点 271
5.6.2 C+++的缺点 272
5.6.3嵌入式C+++程序的代码优化以消除缺点 272
5.7用Java进行嵌入式编程 273
5.7.1 Java编程基础 273
5.7.2使用Java编程的优点 275
5.7.3 Java的缺点 275
5.7.4 J2ME 276
5.7.5 JavaCard和嵌入式Java 277
本章 小结 277
关键词及其定义 78
问题回顾 281
实践练习 281
第6章 程序建模的概念 283
6.1程序模型 284
6.2 DFG模型 286
6.2.1数据流图 286
6.2.2控制数据流图模型 289
6.2.3同步数据流图(SDFG)模型 290
6.3用于事件控制程序流的状态机编程模型 291
6.3.1有限状态机(FSM)模型 293
6.3.2 FSM状态表 294
6.4多处理器系统的建模 298
6.4.1多处理器系统 298
6.4.2展开SDFG的同构SDFG模型 301
6.4.3展开HSDFG的APEG模型 302
6.4.4图在多处理器系统中的应用:划分和调度 303
6.5 UML建模 305
本章 小结 309
关键词及其定义 310
问题回顾 311
实践练习 311
第7章 进程间通信与进程、任务和线程的同步 313
7.1应用程序中的多个进程 314
7.2应用程序中的多线程 316
7.3任务 317
7.4任务的状态 318
7.5任务和数据 320
7.6通过函数、ISR和任务的特征进行区分 321
7.6.1无限事件等待循环的任务编码 321
7.6.2函数、ISR和任务之间的区别 322
7.7信号量的概念 325
7.7.1作为事件信号变量或通报变量的信号量的使用 325
7.7.2作为资源键的信号量以及信号量在临界段中的使用 327
7.7.3使用多个信号量同步任务 329
7.7.4计数信号量 332
7.7.5 P和V信号量 333
7.8共享数据 339
7.8.1多任务和多例程的数据共享问题 339
7.8.2共享数据问题的解决方法 340
7.8.3信号量的应用与共享数据问题 341
7.8.4共享数据问题的消除 341
7.8.5优先级反转问题和死锁情况 342
7.9进程间通信 343
7.10信号函数 345
7.11信号量函数 347
7.12消息队列函数 348
7.13邮箱函数 350
7.14管道函数 353
7.15套接字函数 355
7.16远程过程调用(RPC)函数 359
本章 小结 359
关键词及其定义 360
问题回顾 362
实践练习 362
第8章 实时操作系统 365
8.1 OS服务 366
8.1.1目标 366
8.1.2用户和管态结构 366
8.1.3结构 367
8.1.4内核 368
8.2进程管理 369
8.2.1进程的创建 369
8.2.2已创建进程的管理 370
8.3定时器函数 371
8.4事件函数 373
8.5存储器管理 374
8.5.1存储器分配 374
8.5.2初始分配后的存储管理 374
8.6设备、文件及IO子系统管理 376
8.6.1设备管理 376
8.6.2文件系统的组织和实现 378
8.6.3 I/O子系统 380
8.7 RTOS环境中的中断例程和中断源调用处理 381
8.7.1通过中断源以及ISR发送ISR输入消息直接调用ISR 382
8.7.2 RTOS首先响应中断,接着OS调用相应的ISR 383
8.7.3 RTOS首先响应中断,之后初始化ISR并运行ISR 384
8.8实时操作系统 385
8.9使用RTOS进行基本设计 386
8.9.1原则 387
8.9.2使用信号量和队列进行封装 394
8.9.3硬实时的考虑 396
8.9.4节 约存储器和功耗 397
8.10 RTOS任务调度模型,作为性能指标的中断延迟和任务响应时间 400
8.10.1协作调度模型 401
8.10.2循环和时间片轮转调度模型 404
8.10.3抢占式调度模型 408
8.10.4抢占式调度程序提供的临界段服务模型 413
8.10.5最早时限优先(EDF)优先级和速率单调调度 (RMS)模型 414
8.10.6固定(静态)实时调度模型 415
8.10.7周期、突发以及非周期任务的调度模型中延迟和最后期限的性能指标 416
8.10.8使用CPU负载作为性能指标 416
8.10.9突发任务模型作为性能指标 417
8.11操作系统的安全问题 417
本章小结 418
关键词及其定义 419
问题回顾 420
实践练习 421
第9章 实时操作系统编程-Ⅰ:MicroC/OS- Ⅱ和VxWorks 423
9.1 RTOS的基本函数和类型 424
9.1.1基于宿主机/目标机和基于自主主机的开发方法 425
9.1.2 RTOS的类型 426
9.2 RTOS μCOS-II 427
9.2.1系统级函数 429
9.2.2任务服务和时间函数及其使用范例 433
9.2.3时间延迟函数 439
9.2.4存储器分配相关的函数 442
9.2.5信号量相关函数 444
9.2.6邮箱相关函数 456
9.2.7队列相关函数 465
9.3 RTOS VxWorks 473
9.3.1基本特性 475
9.3.2系统库头文件中的任务管理库 477
9.3.3 VxWorks系统函数和系统任务 481
9.3.4 IPC函数 483
本章 小结 496
关键词及其定义 498
问题回顾 499
实践练习 499
第10章 实时操作系统编程-Ⅱ:Windows CE、 OSEK和实时Linux 函数 501
10.1 Windows CE 502
10.1.1 Windows CE的特点 502
10.1.2 Windows CE编程 504
10.1.3窗口和窗口管理 505
10.1.4内存管理 506
10.1.5文件和注册表 507
10.1.6 Windows CE数据库 508
10.1.7进程、线程和IPC 509
10.1.8按键、触摸屏、鼠标的输入 512
10.1.9通信和网络 514
10.1.10设备间套接字通信函数 516
10.1.11 Win32 API编程 517
10.1.12创建窗口 518
10.2 OSEK 519
10.3 Linux 2.6.x和RTLinux 521
10.3.1实时Linux函数 521
10.3.2 RTLinux 527
本章 小结 531
关键词及其定义 533
问题回顾 536
实践练习 537
第11章 RTOS编程和程序建模设计示例与案例研究-1 539
11.1嵌入式系统设计的案例研究以及使用MUCOSRTOS对巧克力自动售卖机(ACVM)编码 540
11.1.1需求 540
11.1.2系统规范 541
11.1.3使用UML为系统规范建模 543
11.1.4 ACVM的硬件体系结构 546
11.1.5软件体系结构 546
11.1.6创建任务列表、函数和IPC 550
11.1.7编码步骤示例 551
11.2数码相机硬件和软件体系结构的案例研究 559
11.2.1需求 560
11.2.2类图 562
11.2.3数码相机的硬件体系结构 563
11.2.4数码相机的软件体系结构 564
11.3使用RTOS VxWorks将应用层字节流发送到TCP/IP网络的编码案例研究 566
11.3.1需求 567
11.3.2类图、类和对象 567
11.3.3 TCP栈的硬件和软件体系结构 570
11.3.4编码步骤实例 574
本章小结 595
关键词及其定义 597
问题回顾 598
实践练习 599
第12章 RTOS编程和程序建模设计示例与案例研究-2 601
12.1管弦乐队机器人之间通信的案例研究 601
12.1.1需求 604
12.1.2类和类图 605
12.1.3状态图 607
12.1.4机器人管弦乐队MIDI通信的硬件和软件体系结构 607
12.1.5通信任务的同步模型 608
12.2汽车中的嵌入式系统 609
12.3汽车中自适应巡航控制(ACC)系统的嵌入式系统案例研究 611
12.3.1需求 612
12.3.2类图 616
12.3.3 ACC硬件体系结构 617
12.3.4 ACC软件体系结构 618
12.3.5 ACC软件任务的同步模型 618
12.3.6 ACC软件实现 620
12.4智能卡中的嵌入式系统案例研究 629
12.4.1需求 630
12.4.2类图 631
12.4.3硬件和软件体系结构 632
12.4.4同步模型 633
12.4.5示例代码 634
12.5移动电话键输入软件案例研究 641
12.5.1需求 642
12.5.2类和类图 646
12.5.3状态图 648
12.5.4 SMS按键硬件 648
12.5.5 SMS创建和发送应用程序的软件体系结构 649
12.5.6软件任务和同步模型 651
本章小结 652
关键词及其定义 653
问题回顾 655
实践练习 656
第13章 嵌入式软件开发过程和工具 657
13.1嵌入式软件开发过程和工具概述 658
13.1.1开发过程和软硬件 658
13.1.2软件工具 659
13.1.3源代码工程管理工具 660
13.1.4集成开发环境(IDE) 661
13.2宿主机和目标机 662
13.2.1宿主系统 662
13.2.2目标系统 664
13.3链接和定位软件 665
13.3.1文件、寻址和地址解决方法的区别 666
13.3.2 Motorola S-record和Intel Hex二进制映像格式的定位器输出文件 667
13.3.3用于定位器编码的存储器映射 669
13.4将嵌入式软件植入目标系统 671
13.4.1设备PROM或者闪存编程器 671
13.4.2设备编程器的编程方式 672
13.5硬件/软件设计和协同设计中的问题 674
13.5.1选择合适的平台 674
13.5.2存储器敏感和处理器敏感软件 677
13.5.3存储器、程序段和设备地址分配 678
13.5.4嵌入式平台中OS的移植问题 681
13.5.5性能和性能加速器 682
本章小结 684
关键词及其定义 685
问题回顾 687
实践练习 687
第14章 测试、模拟和调试技术与工具 689
14.1在宿主机上进行测试 689
14.2模拟器 691
14.2.1模拟器的特性 692
14.2.2模拟器的局限性 692
14.2.3模拟工具软件 693
14.2.4嵌入式系统的原型开发、测试和调试工具 693
14.3试验工具 694
14.3.1简单的伏特-欧姆表 694
14.3.2简单的LED测试和逻辑探测器 695
14.3.3示波器 695
14.3.4位率测量仪 696
14.3.5逻辑分析仪 696
14.3.6电路内置仿真器(ICE) 697
14.3.7监视器 699
本章小结 700
关键词及其定义 701
问题回顾 701
实践练习 702
附录A不同课程的学习路线图 703
附录B参考文献 705