目 录 第1章 嵌入式系统概论 1 1.1 嵌入式系统概念 1 1.2 嵌入式系统组成 4 1.2.1 嵌入式系统结构 4 1.2.2 嵌入式微处理器 5 1.2.3 嵌入式操作系统 6 1.3 嵌入式系统设计过程 7 1.4 嵌入式系统发展 9 1.5 本书的内容安排 11 1.6 习题 11 第2章 微处理器体系架构 12 2.1 嵌入式微处理器体系结构 12 2.1.1 冯·诺依曼结构与哈佛结构 12 2.1.2 复杂指令集和精简指令集计算机 14 2.1.3 嵌入式微处理器类型 15 2.2 ARM微处理器体系架构 20 2.2.1 可编程模式 22 2.2.2 特殊寄存器 24 2.3 中断机制 26 2.4 嵌入式汇编语言 31 2.4.1 汇编程序的结构 31 2.4.2 指令格式与寻址方式 32 2.4.3 常见指令 34 2.4.4 汇编程序的设计 37 2.5 流水线技术 41 2.5.1 流水线分类 41 2.5.2 Cortex-M4 的三级流水线 42 2.5.3 影响流水线性能的因素 43 2.6 本章小结 44 2.7 习题 44 第3章 嵌入式总线技术 46 3.1 系统总线概述 46 3.2 总线结构与协议 48 3.2.1 CPU总线的结构 48 3.2.2 总线组织及演进 50 3.2.3 典型总线及协议 51 3.2.4 STM32F4系列芯片对总线的支持 65 3.3 DMA 65 3.3.1 定义和作用 66 3.3.2 STM32F4系列芯片DMA控制器结构和DMA特点 66 3.3.3 DMA的设置 69 3.3.4 DMA传输的状态 69 3.3.5 DMA请求的仲裁 71 3.3.6 DMA延迟性能 71 3.4 ARM CPU的总线结构 72 3.4.1 ARM CPU的总线发展 72 3.4.2 ARM总线结构 73 3.4.3 多层总线矩阵结构 80 3.4.4 矩阵总线访问优先权 80 3.5 总线的性能分析 81 3.6 本章小结 81 3.7 习题 81 第4章 存储器系统 83 4.1 存储器系统概述 83 4.2 嵌入式系统存储器的分类和存储器性能分析 83 4.2.1 以存储器的用途分类 83 4.2.2 以信息存取方式分类 85 4.2.3 存储器的主要技术指标 90 4.3 ARM存储器管理 90 4.3.1 存储映射 91 4.3.2 存储格式 93 4.3.3 工作原理 94 4.3.4 启动配置 95 4.3.5 嵌入式闪存支持 95 4.3.6 弹性静态存储器控制器 97 4.3.7 弹性存储器控制器 99 4.4 新型存储器 100 4.4.1 MRAM 101 4.4.2 PRAM 101 4.4.3 RRAM 101 4.5 存储保护和校验技术 102 4.5.1 存储保护 102 4.5.2 校验技术 104 4.6 本章小结 105 4.7 习题 105 第5章 嵌入式输入/输出设备的接口 107 5.1 I/O接口 107 5.1.1 接口结构 107 5.1.2 I/O接口组成 107 5.1.3 I/O接口的数据传输 108 5.2 GPIO 109 5.2.1 GPIO概述 109 5.2.2 GPIO功能特点 110 5.2.3 GPIO输入/输出模式 110 5.2.4 GPIO引脚复用 111 5.2.5 GPIO配置 111 5.3 外部中断/事件 114 5.3.1 外部中断/事件概述 114 5.3.2 EXTI结构和外部中断/事件响应过程 115 5.3.3 外部中断/事件的配置 116 5.4 通信接口 117 5.4.1 通信接口概述 117 5.4.2 串行通信 119 5.4.3 SPI 123 5.4.4 I2C 127 5.5 人机交互 131 5.5.1 LCD概述 131 5.5.2 LCD显示的控制方法 131 5.5.3 指令介绍 134 5.6 ADC/DAC 137 5.6.1 ADC/DAC概述 137 5.6.2 ADC接口的内部结构 137 5.6.3 ADC功能 139 5.6.4 DAC接口的内部结构 144 5.6.5 DAC的功能 145 5.7 本章小结 147 5.8 习题 147 第6章 程序设计与分析 149 6.1 嵌入式程序设计 149 6.1.1 嵌入式程序设计方法 150 6.1.2 嵌入式程序模型 155 6.2 嵌入式C语言编程 161 6.2.1 嵌入式C语言编程方法 161 6.2.2 嵌入式C语言中的元素 162 6.3 编译及优化技术 167 6.3.1 编译的翻译过程 169 6.3.2 编译过程中的代码优化 174 6.4 程序性能分析与优化 177 6.4.1 程序执行时间性能分析方法 177 6.4.2 与机器无关的性能优化 180 6.4.3 与机器相关的性能优化 185 6.4.4 程序功耗分析与优化 188 6.4.5 程序尺寸分析与优化 190 6.5 本章小结 192 6.6 习题 192 第7章 嵌入式最小系统构建 195 7.1 嵌入式最小系统 195 7.2 STM32嵌入式微控制器 195 7.2.1 电源系统 197 7.2.2 时钟系统 199 7.2.3 复位系统 199 7.2.4 外部接口 201 7.3 基于 STM32 微控制器的最小系统构建 204 7.3.1 最小系统的硬件设计 204 7.3.2 最小系统的编程环境搭建 210 7.3.3 最小系统程序设计 214 7.4 本章小结 219 7.5 习题 220 第8章 实时操作系统 221 8.1 概述 221 8.1.1 实时系统的概念 221 8.1.2 实时操作系统的基本特征 222 8.1.3 实时操作系统性能的衡量指标 223 8.1.4 实时操作系统的分类 224 8.1.5 POSIX标准 224 8.1.6 实时操作系统的典型应用 225 8.1.7 几种经典的实时操作系统 225 8.2 进程与任务 226 8.2.1 实时任务模型 226 8.2.2 实时任务分类 228 8.2.3 任务模型 228 8.2.4 实时任务管理 230 8.3 实时调度 231 8.3.1 内核与调度 231 8.3.2 实时调度策略 232 8.3.3 可调度性判定 232 8.4 常用的调度算法 234 8.4.1 单调速率调度算法 235 8.4.2 最早截止时间优先调度算法 236 8.4.3 最低松弛度优先调度算法 237 8.4.4 响应时间分析方法 239 8.5 进程间通信机制 240 8.5.1 进程的通信方式 240 8.5.2 进程同步与互斥 242 8.6 本章小结 243 8.7 习题 243 第9章 ?C/OS 操作系统 245 9.1 ?C/OS III 概述 245 9.2 任务管理 247 9.2.1 实时内核的执行 247 9.2.2 任务的状态及转换 248 9.2.3 任务管理的系统服务 250 9.2.4 任务的调度 256 9.3 中断管理 259 9.4 时间管理 262 9.5 内存管理 267 9.6 同步与消息传递 271 9.6.1 信号量 271 9.6.2 事件标志组 271 9.6.3 消息队列 272 9.7 ?C/OS的移植 273 9.8 本章小结 275 9.9 习题 275 第10章 嵌入式系统调试、测试与验证方法 276 10.1 嵌入式系统调试 276 10.1.1 嵌入式系统调试技术 277 10.1.2 调试手段 279 10.2 嵌入式软件测试 282 10.2.1 嵌入式系统测试过程 284 10.2.2 嵌入式软件开发标准及测试指标 284 10.2.3 测试方法 288 10.3 嵌入式软件自动验证技术——模型检测 291 10.3.1 模型检验过程 292 10.3.2 状态爆炸问题 293 10.3.3 模型检测工具 293 10.4 本章小结 294 10.5 习题 294 第11章 多核嵌入式微处理器 297 11.1 多核嵌入式系统 297 11.1.1 多核处理器 297 11.1.2 多核软件环境 298 11.2 ARM多核处理器 299 11.2.1 ARM MPcore多处理器结构 299 11.2.2 ARM 多核处理器中断管理 300 11.2.3 big.LITTLE 技术 301 11.2.4 多核处理器启动过程 302 11.3 多核处理器实时调度算法 304 11.4 多核处理器应用程序开发 306 11.4.1 同构多核处理器程序开发 307 11.4.2 异构多核处理器程序开发 309 11.5 本章小结 310 11.6 习题 310 附录A 部分代码 311 A.1 stm32fxx.h文件 311 A.2 引脚为输出的main.c文件 311 A.3 usart.h文件 312 A.4 usart.c文件 313 A.5 stm32f4xx_it.c文件 315 A.6 USART工程的main.c文件 315 A.7 循环缓冲区的main.c文件 316 参考文献 319