作者:(印度) Raj Kamal [同作者作品] [作译者介绍] 译者: 陈曙晖[同译者作品] 王继进 丛书名: 国外计算机科学经典教材 出版社:清华大学出版社 ISBN:7302096244 上架时间:2005-6-15 出版日期:2005 年6月 开本:185×260 页码:560 版次:1-1 编辑推荐一本深入浅出的嵌入式系统教程,是嵌入式系统的经典书籍,相信你再阅读时,一定会多次拍案叫绝,尤其是被作者在硬件、软件和应用领域的广博知识所折服。本书作者Raj Kamal教授在无线电子、微处理器等领域有30多年的理论和实验教学经验。内容简介可以毫不夸张地说,这是嵌入式系统的经典书籍,在阅读本书的英文版时,我们多次拍案叫绝,尤其是被作者在硬件、软件和应用领域的广博知识所折服。本书作者Raj Kamal教授在无线电子、微处理器、微控制器、计算机组成和体系结构以及嵌入式系统和计算机网络等领域有30多年的理论和实验教学经验。与其他书籍相比,本书面向的是嵌入式系统开发的初中级设计人员,是一本深入浅出的嵌入式系统教程。我想这也是作者的初衷。本书的特点在于,它不仅全面介绍了嵌入式系统的基础知识,而且通过大量详尽的示例帮助读者理解理论知识。当然,这些真实案例对系统设计人员来说具有非常好的参考价值。如本书第11章中的“巧克力自动售卖机”、“网络传输”、“汽车自适应行驶系统”、“智能卡”等完整案例,对于未接触过嵌入式系统开发,但想要尽快熟悉开发过程的设计人员提供了很好的示范和模板。更难得的是,本书并没有拘泥于介绍传统的嵌入式系统原理和设计方法,嵌入式系统领域的新兴技术和产品同样得到关注。 目录回到顶部↑目 录 第1章 嵌入式系统简介 1 1.1 嵌入式系统 2 1.1.1 系统 2 1.1.2 嵌入式系统 3 1.1.3 嵌入式系统的分类 4 1.1.4 嵌入式系统设计者需要具备的技能 5 1.2 系统中的处理器 6 1.2.1 系统中的处理器 6 1.2.2 微处理器 7 1.2.3 微控制器 8 1.2.4 复杂系统的嵌入式处理器 10 1.2.5 数字信号处理器 11 1.2.6 嵌入式系统的专用系统处理器 11 1.2.7 使用通用处理器的多处理器系统 12 1.3 其他硬件单元 13 1.3.1 电源和低功耗管理 13 1.3.2 时钟振荡电路和时钟单元 15 1.3.3 系统需要的各种计时和计数功能的实时时钟和定时器 16 .1.3.4 复位电路、加电复位和Watchdog定时器复位 16 1.3.5 存储器 17 1.3.6 输入、输出和I/O端口,IO总线和IO接口 18 1.3.7 中断处理器 19 1.3.8 DAC(使用PWM)和ADC 19 1.3.9 LCD和LED显示 20 1.3.10 小键盘/键盘 21 1.3.11 脉冲拨号电路、调制解调器和收发器 21 1.3.12 GPIB(IEEE 488)连接 21 1.3.13 嵌入式系统硬件的连接和接口总线及单元 22 1.3.14 案例中所需要的硬件单元 22 1.4 嵌入系统软件 24 1.4.1 产品的最终机器可实现软件 24 1.4.2 用机器码编写软件 25 1.4.3 用特定于处理器的汇编语言编写软件 26 1.4.4 用高级语言编写软件 27 1.4.5 使用操作系统的设备驱动程序和设备管理软件 29 1.4.6 多任务调度和使用RTOS设备的软件设计 30 1.4.7 设计嵌入式系统的软件工具 30 1.4.8 示例中需要的软件工具 32 1.4.9 软件设计模型 32 1.5 示例嵌入式系统 33 1.6 嵌入式片上系统(SOC)和内部VLSI电路 35 1.6.1 用于便携式电话的SoC示例 35 1.6.2 ASIP 36 1.6.3 IP核 36 1.6.4 嵌入GPP 37 1.6.5 具有一个或者多个处理器的FPGA核 37 1.6.6 示例SoC中的组成部分―― 智能卡 38 第2章 处理器和存储器组织 45 2.1 处理器中的结构单元 46 2.2 嵌入式系统的处理器选择 55 2.3 存储器设备 58 2.3.1 ROM:使用方法、形式和变种 59 2.3.2 RAM设备 60 2.4 嵌入式系统的存储器选择 61 2.5 程序段和块的存储器分配及系统的存储器映射 64 2.5.1 各种存储器段中的函数、过程、数据和堆栈 64 2.5.2 不同数据结构和数据集合元素的存储器块 66 2.5.3 存储器映射 71 2.5.4 内部设备和I/O设备在映射中的地址 77 2.6 直接存储器访问 79 2.7 处理器、存储器和I/O设备的接口 80 第3章 设备网络的设备和总线 87 3.1 I/O设备 88 3.1.1 I/O设备的类型和示例 88 3.1.2 串行设备的同步、准同步和异步通信 90 3.1.3 内部串行通信设备的示例 93 3.1.4 并口设备 95 3.1.5 设备端口的复杂接口特性 97 3.2 定时器和计数设备 98 3.3 互连的多个设备之间通过I2C、CAN和高级I/O总线进行串行通信 102 3.3.1 I2C总线 102 3.3.2 CAN总线 103 3.3.3 USB总线 105 3.3.4 先进的串行高速总线 105 3.4 多个互连I/O设备之间通过ISA、PCI、PCI-X和高级总线进行的计算机 或者主机系统并行通信 106 3.4.1 ISA总线 106 3.4.2 PCI和PCI/X总线 107 3.4.3 高级并行高速总线 108 第4章 设备驱动程序和中断服务机制 115 4.1 设备驱动程序 117 4.1.1 不使用ISR的设备服务 117 4.1.2 设备驱动程序ISR 118 4.1.3 设备驱动程序 120 4.1.4 作为设备驱动和网络函数的Linux 内幕 121 4.1.5 编写系统中的物理设备驱动ISR 122 4.1.6 虚拟设备 123 4.2 系统中的并口设备驱动程序 124 4.3 系统中的串口设备驱动程序 130 4.4 内部可编程定时设备的设备驱动程序 134 4.5 中断服务(处理)机制 135 4.5.1 硬件和软件相关的中断源 135 4.5.2 软件错误相关的硬件中断 135 4.5.3 软件指令相关的中断源 137 4.5.4 内部设备相关的硬件中断 138 4.5.5 中断向量 138 4.5.6 根据可屏蔽和不可屏蔽的中断分类 138 4.5.7 所有可屏蔽中断源的激活(未屏蔽)和禁用(屏蔽) 139 4.5.8 中断挂起寄存器或者状态寄存器 139 4.6 上下文和上下文切换周期、最终期限和中断延迟 139 4.6.1 上下文、延迟和最终期限 139 4.6.2 从上下文保存的角度对处理器中断服务机制的分类 143 4.6.3 使用DMA通道帮助缩短中断延迟周期 144 4.6.4 满足服务最终期限的优先级分配 144 4.6.5 硬件优先级的软件覆盖 145 第5章 编程概念及C与C++的嵌入式编程 150 5.1 用汇编语言和高级语言C进行软件编程 151 5.2 C程序中的元素:头文件、源文件以及预处理指令 152 5.2.1 用于包含文件的include指令 152 5.2.2 源文件 154 5.2.3 配置文件 154 5.2.4 预处理指令 154 5.3 程序元素:宏与函数 154 5.4 程序元素:数据类型、数据结构、修饰符、语句、循环和指针 156 5.4.1 数据类型 156 5.4.2 使用数据结构:队列、堆栈、链表和树 156 5.4.3 修饰符 158 5.4.4 条件语句、循环语句以及无限循环语句 159 5.4.5 指针和NULL指针 161 5.4.6 函数调用 163 5.4.7 主程序中按照循环顺序进行的多函数调用 164 5.4.8 函数指针、函数队列和中断服务例程队列 166 5.5 队列 167 5.5.1 队列 167 5.5.2 实现网络协议的队列 170 5.5.3 发生中断时函数的排列 172 5.5.4 网络中进行流控制的FIPO队列 174 5.6 堆栈 175 5.7 链表与有序链表 178 5.7.1 链表 178 5.7.2 活动设备驱动器(软件时钟)的链表 186 5.7.3 就绪链表中的任务链表 187 5.8 C++嵌入式编程 189 5.8.1 面向对象的编程 189 5.8.2 C++的嵌入式编程 189 5.9 用Java进行嵌入式编程 191 5.9.1 什么时候用Java编程 191 5.9.2 Java的缺点 191 5.10 C程序编译器与交叉编译器 193 5.11 嵌入式C/C++的源代码工程管理工具 194 5.12 存储器需求的优化 194 第6章 单处理器和多处理器系统软件开发过程中的程序建模概念 201 6.1 软件实现之前对软件分析过程的建模 202 6.1.1 数据流图在程序分析中的用法 202 6.1.2 用于程序分析的控制数据流图的用法 204 6.2 用于事件控制或者响应时间受到约束的实时程序的编程模型 205 6.2.1 有限状态机模型 205 6.2.2 Petri网模型 209 6.3 多处理器系统的建模 215 6.3.1 多处理器系统中的问题 216 6.3.2 模型 217 6.3.3 同步数据流图模型 218 6.3.4 同构的同步数据流图模型 219 6.3.5 无环优先扩展图模型 220 6.3.6 定时的Petri网和扩展预测/转换网模型 221 6.3.7 多线程图系统模型 222 6.3.8 图和Petri网在多处理器系统中的应用 223 第7章 嵌入式软件开发过程中的软件工程实践 233 7.1 软件的算法复杂度 234 7.2 软件开发生命周期及其模型 236 7.2.1 软件开发过程中的线性顺序模型(瀑布模型或者生命周期模型) 236 7.2.2 RAD模型 237 7.2.3 增量模型 237 7.2.4 并发模型 238 7.2.5 基于组件(面向对象)的软件开发过程模型 238 7.2.6 基于第四代工具的软件开发过程模型 238 7.2.7 基于面向对象和基于第四代工具的方法 239 7.3 软件分析 239 7.4 软件设计 241 7.5 软件实现 242 7.6 软件测试、确认以及调试 243 7.6.1 测试、验证以及确认 243 7.6.2 调试 246 7.7 软件开发过程中的实时程序设计问题 248 7.7.1 在需求和规范的分析中存在的问题 248 7.7.2 设计和实现中存在的问题 249 7.7.3 系统集成中的问题 249 7.7.4 测试中的问题 249 7.8 软件项目管理 250 7.8.1 项目管理 250 7.8.2 项目测度 251 7.9 软件维护 253 7.10 统一建模语言(UML) 255 第8章 进程间通信与进程、任务和线程的同步 265 8.1 应用程序中的多个进程 266 8.1.1 进程 266 8.1.2 任务 266 8.1.3 线程 268 8.1.4 通过函数、ISR和任务的特征进行区分 269 8.2 多任务和多例程的数据共享问题 270 8.2.1 数据共享问题及其解决方案 270 8.2.2 对任务或者任务的临界段使用信号量 271 8.2.3 优先级倒置问题和死锁情况 279 8.3 进程间通信 280 8.3.1 信号 281 8.3.2 信号量标识或者互斥体用作资源键(用于进程的资源加锁和解锁) 281 8.3.3 消息队列 282 8.3.4 邮箱 284 8.3.5 管道 285 8.3.6 虚拟(逻辑)套接字 287 8.3.7 远程过程调用(RPC) 287 第9章 实时操作系统 292 9.1 操作系统服务 293 9.1.1 目标 293 9.1.2 结构 294 9.1.3 内核 295 9.1.4 进程管理 296 9.1.5 存储器管理 297 9.1.6 设备管理 298 9.1.7 文件系统的组织和实现 300 9.2 I/O子系统 302 9.3 网络操作系统 302 9.4 实时操作系统与嵌入式操作系统 304 9.4.1 实时操作系统 304 9.4.2 在嵌入式系统中何时需要RTOS 304 9.4.3 RTOS的多任务调度管理 306 9.4.4 实时系统中通过RTOS进行的多任务调度 308 9.5 RTOS环境中的中断例程:RTOS的中断源调用处理 309 9.5.1 通过中断源直接调用ISR 310 9.5.2 通过中断源以及调度任务的暂时挂起,直接调用RTOS 311 9.5.3 通过中断源以及RTOS对任务和ISR的调度,直接调用RTOS 311 9.6 RTOS任务调度模型,作为性能测度的中断延迟和任务响应时间 311 9.6.1 使用就绪任务循环队列的协作轮转调度 312 9.6.2 使用按照优先级约束排序列表的就绪任务的协作调度 313 9.6.3 时间分片的循环调度(速率单调的协作调度) 315 9.6.4 调度程序控制的抢占式调度模型策略 316 9.6.5 抢占式调度程序提供的临界段服务 318 9.6.6 任务的固定(静态)实时调度 320 9.6.7 调度算法中的优先级分配 320 9.6.8 使用概率定时Petri网(随机)和多线程图(MTG)的高级调度算法 321 9.7 周期、零散以及非周期任务的调度模型的性能测度 321 9.7.1 使用CPU负载作为性能尺度 321 9.7.2 零散任务模型 322 9.8 为RTOS的标准化和任务内部通信函数采用的IEEE标准POSIX 1003.1B 322 9.9 抢占式调度程序的基本操作及其在处理器上预期耗费的时间 324 9.10 用于进程间、ISR间、OS函数间和任务之间同步及资源管理的15条策略 325 9.11 嵌入式LINUX的内部组织:设备驱动程序和嵌入式系统的LINUX内核 326 9.12 操作系统的安全问题 329 9.13 移动式操作系统 330 第10章 实时操作系统编程工具:MicroC/OS-II和VxWorks 334 10.1 测试稳定且调试合格的实时操作系统的必要性 335 10.2 μC/OS-II 337 10.2.1 RTOS系统级函数 338 10.2.2 任务服务函数及其使用范例 341 10.2.3 时间延迟函数 347 10.2.4 函数相关的存储器分配 349 10.2.5 信号量相关函数 351 10.2.6 邮箱相关函数 363 10.2.7 队列相关函数 372 10.3 VxWorks 381 10.3.1 基本特性 382 10.3.2 系统库头文件中的任务管理库 384 10.3.3 VxWorks系统函数和系统任务 388 10.3.4 进程(任务)间通信函数 391 第11章 RTOS编程案例研究 405 11.1 使用MUCOS RTOS对巧克力自动售卖机编码 406 11.1.1 案例定义、多任务及其函数 406 11.1.2 创建任务、函数和IPC 408 11.1.3 编码步骤示例 411 11.2 使用RTOS VxWorks将应用层字节流发送到TCP/IP网络上 420 11.2.1 案例定义、多任务及其函数 421 11.2.2 创建任务、函数和IPC 424 11.2.3 编码步骤示例 425 11.3 汽车自适应巡航控制系统的嵌入式系统 443 11.4 智能卡中的嵌入式系统 456 11.4.1 嵌入式硬件 457 11.4.2 嵌入式软件 458 第12章 嵌入式系统中的软硬件协同设计 472 12.1 嵌入式系统项目管理 473 12.2 系统开发过程中嵌入式系统设计和协同设计问题 474 12.2.1 嵌入式系统开发过程的目标 474 12.2.2 行动计划 474 12.2.3 完整的规范和系统需求 475 12.2.4 原理设计 476 12.2.5 软硬件布局设计 477 12.2.6 详细设计 478 12.2.7 实现工具 478 12.2.8 测试 479 12.3 嵌入式系统开发阶段中的设计周期 479 12.4 目标系统或其仿真器和内置电路仿真器(ICE) 480 12.4.1 使用目标系统 480 12.4.2 仿真器和ICE 481 12.4.3 用于将最终代码下载到ROM中的设备编程器 483 12.5 嵌入式系统开发中的软件工具 483 12.5.1 代码生成工具(汇编器、编译器、加载器和链接器) 483 12.5.2 模拟器 484 12.5.3 嵌入式系统的原型开发、测试和调试工具 486 12.5.4 集成开发环境 487 12.5.5 存储器、处理器敏感程序和设备驱动程序 489 12.5.6 动态链接库 489 12.6 示波器和逻辑分析仪在系统硬件测试中的使用 490 12.6.1 逻辑探测器或者LED测试 490 12.6.2 示波器 490 12.6.3 逻辑分析仪 491 12.6.4 位率测量仪 491 12.6.5 用于ROM调试的系统监控代码 492 12.7 嵌入式系统设计中的问题 492 12.7.1 选择合适的平台 492 12.7.2 嵌入式系统处理器的选择 493 12.7.3 需要考虑的因素和必需的特性 494 12.7.4 软硬件权衡 495 12.7.5 性能建模 495 12.7.6 性能加速器 496 12.7.7 嵌入式系统中OS的移植问题 496 附录A CISC和RISC处理器体系结 构和指令集示例 504 A.1 CISC和RISC处理器的指令及其处理 504 A.1.1 指令和数据的格式 504 A.1.2 寻址模式 505 A.1.3 指令集 506 A.1.4 CISC和RISC体系结构 507 A.2 指令集示例―― ARM7 508 A.3 ARM处理器的汇编语言程序示例 510 附录B 嵌入式系统高性能处理器 511 B.1 ARM处理器示例 511 B.2 高性能处理器示例 514 B.3 加速器 515 附录C 嵌入式系统8/16/32位微处理器及其体系结构概述 517 C.1 Intel、Motorola和PIC系列微控制器的体系结构概述 517 C.2 Motorola系列CISC和RISC的新一代微控制器 519 附录D 嵌入式数字信号处理器 522 D.1 数字信号处理器的体系结构 522 D.2 DSP处理器和传统处理器的比较 524 D.3 定点运算和浮点运算的比较 525 D.4 嵌入式系统的DSP 525 D.4.1 TMS320C2000TM平台 526 D.4.2 TMS320C5000TM平台 526 D.4.3 TMS320C6000TM平台 526 D.4.4 DSP的TMS320C24x和C28X代产品 527 D.4.5 TMS320C54x和TMS320C55x代DSP 528 D.4.6 TMS320C62x、64x和C67x代DSP 529 D.4.7 RISC环境下的OMAP5910嵌入式处理器DSP 530 D.4.8 基于SoC的解决方案Texas DSP TMS320DM310 530 附录E 嵌入式系统应用的新型处理器 532 附录F 串行和并行总线 537 F.1 新的串行总线标准(USB 2.0,IEEE 1394) 537 F.2 新的并行总线标准(Compact PCI、PCI-X) 537 附录G 嵌入式系统中的设备 539 G.1 各种形式的ROM设备 539 G.2 ROM设备编程器 540 G.2.1 二进制映像 540 G.2.2 Motorola S-Record格式 540 G.2.3 Intel Hex-File格式 541 G.2.4 设备编程器的编程方法 542 G.3 RAM设备 544 G.3.1 静态和动态RAM 544 G.3.2 EDO RAM 544 G.3.3 SDRAM 545 G.3.4 RDRAM 545 G.3.5 参数化的分布式RAM 545 G.3.6 参数化的块RAM 545 G.4 微控制器中的并口 545 G.5 串行通信设备 546 G.5.1 Motorola 68HC11中的SPI和SCI 546 G.5.2 微控制器中的串行通信设备 547 G.6 微处理器中的定时器 548 G.7 各种处理器系列中的中断源及其控制 550 G.8 80x86处理器的中断 552 G.9 68HC11中的中断 552 G.9.1 中断服务 552 G.9.2 中断源 553 附录H 嵌入式系统体系结构、编程和设计中的重要内容 554 H.1 推荐使用的教学大纲 554 H.2 CDAC嵌入式系统课程教学大纲涉及的内容 556 ……