第1部分 嵌入式系统 2
第1章 嵌入式系统概述 2
1.1 什么是嵌入式系统 2
1.2 嵌入式系统的特点 3
1.3 嵌入式系统的体系结构 4
1.3.1 硬件平台 5
1.3.2 硬件抽象层 6
1.3.3 实时操作系统 7
1.3.4 实时应用程序 7
1.4 嵌入式系统的分类 7
1.5 嵌入式系统的应用 9
本章小结 10
思考与练习题 11
第2章 嵌入式系统设计基本概念 12
2.1 嵌入式硬件系统 12
2.1.1 嵌入式处理器 13
2.1.2 存储器 18
2.1.3 外围设备 22
2.2 嵌入式操作系统 28
2.2.1 嵌入式操作系统的发展 28
2.2.2 嵌入式实时操作系统的分类 28
2.2.3 嵌入式实时操作系统的可裁剪性及其实现 29
2.2.4 常用的实时操作系统 30
2.3 嵌入式系统的基本设计过程 33
2.3.1 需求分析 34
2.3.2 规格说明 36
2.3.3 体系结构设计 36
2.3.4 设计硬件构件和软件构件 40
2.3.5 系统调试与集成 41
2.4 本教程选择的软硬件平台 41
2.4.1 教学硬件平台——ARM 41
2.4.2 教学软件平台——Linux 41
本章小结 42
思考与练习题 42
第2部分 嵌入式系统硬件开发技术第3章 基于ARM的处理器体系结构 46
3.1 ARM体系结构 47
3.1.1 ARM微处理器结构 47
3.1.2 ARM工作状态 53
3.1.3 ARM微处理器的寄存器组织 53
3.1.4 ARM微处理器的指令结构 53
3.2 ARM9处理器简介 53
3.2.1 与ARM7处理器比较 54
3.2.2 OMAP5912处理器介绍 58
本章小结 61
思考与练习题 62
第4章 ARM微处理器的编程模型与指令系统 63
4.1 ARM微处理器的工作状态 63
4.2 ARM微处理器的运行模式 64
4.3 ARM体系结构的存储器格式 64
4.3.1 大端格式 64
4.3.2 小端格式 65
4.4 寄存器组织 65
4.4.1 ARM状态下的寄存器组织 65
4.4.2 Thumb状态下的寄存器组织 69
4.5 ARM的异常 70
4.5.1 ARM体系结构所支持的异常类型 70
4.5.2 异常向量(Exception Vectors) 71
4.5.3 对异常的响应 71
4.5.4 从异常返回 72
4.5.5 各类异常的具体描述 73
4.5.6 异常的进入/退出 74
4.5.7 异常优先级(Exception Priorities) 75
4.6 ARM微处理器的指令系统基础 75
4.6.1 指令长度及数据类型 75
4.6.2 ARM微处理器的指令的分类与格式 76
4.6.3 指令的条件域 76
4.7 ARM指令的寻址方式 77
4.7.1 立即寻址 77
4.7.2 寄存器寻址 77
4.7.3 寄存器间接寻址 78
4.7.4 基址变址寻址 78
4.7.5 多寄存器寻址 79
4.7.6 堆栈寻址 80
4.7.7 相对寻址 80
4.8 ARM指令集 81
4.8.1 数据处理指令 81
4.8.2 乘法指令与乘加指令 85
4.8.3 程序状态寄存器访问指令 87
4.8.4 加载/存储指令 88
4.8.5 批量数据加载/存储指令 89
4.8.6 跳转指令 90
4.8.7 数据交换指令 91
4.8.8 移位指令(操作) 92
4.8.9 协处理器指令 93
4.8.10 异常产生指令 94
4.9 Thumb指令及应用 95
4.9.1 Thumb编程模型 95
4.9.2 Thumb状态切换 96
4.9.3 Thumb指令集特点 96
本章小结 97
思考与练习题 97
第3部分 嵌入式系统软件程序设计第5章 嵌入式操作系统 100
5.1 嵌入式系统的进程 100
5.1.1 进程的概念 101
5.1.2 上下文切换 102
5.1.3 进程状态 103
5.1.4 进程调度 104
5.1.5 进程间通信机制 110
5.2 嵌入式操作系统的中断和时钟管理 115
5.2.1 中断管理 115
5.2.2 时钟管理 118
5.3 嵌入式操作系统的内存管理 120
5.3.1 内存管理的主要功能 120
5.3.2 虚拟内存的概念 120
5.4 常用嵌入式操作系统 121
5.4.1 μC/OS-Ⅱ 121
5.4.2 Linux操作系统 130
本章小结 139
思考与练习题 140
第6章 嵌入式Linux开发环境及其在ARM上的移植 141
6.1 嵌入式Linux开发环境 142
6.1.1 交叉编译工具介绍 143
6.1.2 交叉编译环境的建立 155
6.2 嵌入式Linux在ARM平台上的移植 161
6.2.1 Linux内核源代码的基本组织情况 161
6.2.2 嵌入式Linux内核裁剪方法 162
6.2.3 嵌入式Linux内核定制过程 165
6.2.4 内核编译及装载 169
6.2.5 文件系统及其实现 169
本章小结 172
思考与练习题 173
第7章 设备驱动程序 174
7.1 概述 174
7.1.1 设备驱动原理 175
7.1.2 模块化编程 176
7.1.3 设备类型 177
7.1.4 设备号 181
7.2 设备文件接口 182
7.2.1 用户访问接口 182
7.2.2 一些重要数据结构 183
7.2.3 I/O操作 187
7.3 中断处理 189
7.3.1 注册中断处理程序 189
7.3.2 中断处理程序实现 191
7.4 应用实例 191
7.4.1 字符设备——按键驱动程序 192
7.4.2 网络设备——CS8900A芯片驱动程序 193
7.4.3 CAN总线驱动开发 200
本章小结 203
思考与练习题 203
第8章 用户图形接口GUI 205
8.1 嵌入式系统中的GUI 205
8.1.1 嵌入式GUI的发展需求 206
8.1.2 嵌入式GUI的功能特点 206
8.1.3 目前流行的嵌入式GUI系统 207
8.2 Qt/Embedded基础 211
8.2.1 Qt/Embedded简介 212
8.2.2 Qt/Embedded特点 212
8.2.3 Qt/Embedded体系架构 213
8.3 Qt/Embedded开发环境 219
8.3.1 Qt/E 2.x系列 220
8.3.2 Qt/E 3.x系列 222
8.4 Qt/Embedded开发实例 223
8.4.1 Qt/Embedded应用系统基本开发流程 223
8.4.2 Qt/Embedded下触摸屏驱动的设计 226
本章小结 231
思考与练习题 231
第4部分 嵌入式系统开发应用实例第9章 基于OMAP5912的开发应用实例 234
9.1 MAP5912的结构和特点 234
9.1.1 ARM926EJ-S内核 235
9.1.2 TMS320C55x内核 235
9.1.3 存储器管理 235
9.1.4 直接存储器访问控制器(DMA) 236
9.1.5 时钟和电源管理 237
9.1.6 外围控制模块 237
9.2 基于OMAP5912的硬件平台设计 238
9.2.1 电源管理模块 239
9.2.2 存储模块 240
9.2.3 音频处理模块 240
9.2.4 外围接口 242
9.3 基于OMAP5912的软件系统设计 243
9.3.1 OMAP5912系统的软件架构 243
9.3.2 嵌入式Linux系统的启动流程 244
9.3.3 Bootloader及其移植 244
9.3.4 MontaVista Linux内核的移植 251
9.3.5 文件系统的移植 254
9.3.6 基于OMAP5912平台的Linux设备驱动程序 255
本章小结 256
思考与练习题 256
缩略语 257
参考文献 260