本书以实际的嵌入式系统产品开发为主线,力求透彻讲解开发中所涉及的庞大而复杂的相关知识。其中第1~8章为基础篇,介绍了嵌入式系统的基础知识和开发过程中需要的一些理论知识,具体包括嵌入式系统简介、建立嵌入式开发环境、搭建嵌入式硬件开发平台、嵌入式ARM处理简介以及嵌入式系统交叉编译等内容。第9~14章为实践篇,介绍了具体的嵌入式系统开发实例,分别为Flash ROM存储器开发、定时器中断实例开发、µC/OS-Ⅱ移植与应用实例开发、µClinux移植实例开发、µClinux下网络通信实例开发和图形用户界面实例开发等。 本书不仅详细讲解基础理论知识,还提供了大量的开发案例以供读者参考,学习性和实用性强。可供从事嵌入式系统设计、开发的广大科技人员阅读,也可以作为大专院校电子控制专业及其他相关专业的教材或参考书。目 录
基 础 篇
第1章 嵌入式系统概述 1
1.1 嵌入式系统简介 1
1.1.1 嵌入式系统的定义 1
1.1.2 嵌入式系统的硬件/软件特征 1
1.1.3 嵌入式操作系统 2
1.1.4 学习嵌入式系统的意义 2
1.2 ARM微处理器的结构 3
1.2.1 RISC体系结构 3
1.2.2 ARM微处理器的寄存器结构 4
1.2.3 ARM微处理器的指令结构 4
1.3 ARM微处理器系列 5
1.3.1 ARM7微处理器系列 5
1.3.2 ARM9微处理器系列 6
1.3.3 ARM9E微处理器系列 6
1.3.4 ARM10E微处理器系列 7
1.3.5 SecurCore微处理器系列 7
1.3.6 StrongARM微处理器 7
1.3.7 Xscale微处理器 8
1.4 ARM微处理器的应用选型 8
第2章 嵌入式处理器介绍 10
2.1 ARM微处理器概述 10
2.1.1 ARM微处理器的应用领域 及特点 10
2.1.2 ARM微处理器的编程模型 概述 11
2.1.3 ARM体系结构的存储器 格式 12
2.1.4 指令长度及数据类型 12
2.2 ARM微处理器的指令系统 13
2.2.1 ARM微处理器指令的分类 与格式 13
2.2.2 指令的条件域 14
2.3 ARM指令的寻址方式 15
2.3.1 立即寻址 15
2.3.2 寄存器寻址 15
2.3.3 寄存器间接寻址 16
2.3.4 基址变址寻址 16
2.3.5 多寄存器寻址 16
2.3.6 相对寻址 17
2.3.7 堆栈寻址 17
2.4 ARM指令集 17
2.4.1 跳转指令 17
2.4.2 数据处理指令 19
2.4.3 乘法指令与乘加指令 24
2.4.4 程序状态寄存器访问指令 26
2.4.5 加载/存储指令 27
2.4.6 批量数据加载/存储指令 29
2.4.7 数据交换指令 30
2.4.8 移位指令(操作) 31
2.4.9 协处理器指令 32
2.4.10 异常产生指令 34
2.5 Thumb指令及应用 35
2.6 其他嵌入式处理器介绍 35
2.6.1 x86 36
2.6.2 PowerPC 36
2.6.3 Motorola 68000 36
2.6.4 MIPS 37
第3章 嵌入式ARM处理器介绍 38
3.1 S3C44B0X处理器 38
3.1.1 S3C44B0X片上资源简介 38
3.1.2 引脚信号定义 40
3.2 S3C2410处理器 43
3.2.1 S3C2410片上资源简介 43
3.2.2 引脚信号定义 45
3.3 S3C44B0X初始化汇编程序实例 50
3.3.1 Bootloader介绍 50
3.3.2 初始化代码 50
3.3.3 调试与运行 60
第4章 ARM编程模型的工作原理 64
4.1 ARM920T内核 64
4.1.1 CPU核简介 64
4.1.2 流水线结构 65
4.2 ARM微处理器的工作状态 66
4.3 处理器的工作模式 67
4.4 寄存器组织 68
4.4.1 通用寄存器 69
4.4.2 程序状态寄存器 71
4.4.3 Thumb 状态下的寄存器 组织 73
4.5 异常 74
4.5.1 ARM 体系结构所支持的 异常类型 74
4.5.2 对异常的响应 75
4.5.3 从异常返回 76
4.5.4 外中断IRQ异常举例 77
4.5.5 各类异常的具体描述 78
4.5.6 异常进入/退出 79
4.5.7 异常向量 80
4.5.8 异常优先级 80
4.5.9 应用程序中的异常处理 81
4.6 ARM存储器接口 81
4.7 ARM体系结构的缓存 82
4.7.1 缓存的结构 82
4.7.2 缓存的工作原理 83
4.8 ARM体系结构的存储器管理 单元(MMU) 84
4.9 CP15协处理器 85
4.9.1 寄存器R0和R1 87
4.9.2 转换表基地址寄存器 88
4.9.3 域访问控制寄存器 88
4.9.4 故障状态寄存器 89
4.9.5 故障地址寄存器 89
4.9.6 Cache操作寄存器 89
4.9.7 TLB工作寄存器 89
第5章 Bootloader 90
5.1 Bootloader概述 90
5.2 Bootloader设计分析 90
5.2.1 启动加载(Bootloading)模式 91
5.2.2 下载(Downloading)模式 91
5.3 Bootloader的启动及初始化 91
5.3.1 Bootloader的stage1 91
5.3.2 Bootloader的stage2 92
5.4 Bootloader难点分析 93
5.5 命令控制台 95
5.6 应用实例——编译Bootloader 95
第6章 嵌入式系统交叉编译 100
6.1 编译原理概述 100
6.1.1 编译的一般过程 100
6.1.2 与编译器相关的程序 101
6.1.3 编译器的移植 102
6.2 词法分析 102
6.2.1 词法的形式化描述 102
6.2.2 词法分析程序的设计 105
6.3 语法分析 106
6.3.1 自顶向下的语法分析 107
6.3.2 自底向上的语法分析 109
6.4 中间代码 112
6.5 代码优化 114
6.6 交叉编译技术 117
6.7 GCC交叉编译器 118
6.7.1 GCC编译流程 118
6.7.2 Linux环境下的GCC交叉 编译器 121
6.8 应用实例——交叉编译器生成 实例 122
6.8.1 可执行文件格式 122
6.8.2 交叉编译器 123
6.8.3 相关问题 125
第7章 嵌入式开发及调试 126
7.1 ARM开发工具 126
7.1.1 ARM开发工具综述 126
7.1.2 ARM SDT 127
7.1.3 ARM ADS 129
7.1.4 MULTI 2000 131
7.1.5 Nucleus UDB 133
7.1.6 visionCLICK/visionXD 133
7.1.7 Hitool for ARM 134
7.1.8 Embest IDE 135
7.1.9 BDI 1000/BDI 2000 135
7.1.10 Multi-ICE 136
7.1.11 JEENI仿真器 136
7.1.12 TRACE32-ICD 137
7.1.13 visionPROBE/visionICE II 138
7.2 Hitool for ARM开发系统 138
7.2.1 ARM的开发方案 138
7.2.2 Hitool for ARM软件产品 特征 140
7.2.3 Hitool for ARM功能 及使用 141
7.3 嵌入式系统开发流程 146
7.4 Angel调试监控程序 148
7.4.1 Angel概述 148
7.4.2 Angel系统的组成 151
7.4.3 Angel系统资源需求 152
7.4.4 Angel操作 153
7.4.5 Angel接口 155
7.4.6 Angel的通信结构 156
7.4.7 Angel调试协定 156
7.5 启动代码 158
7.6 编译Linux内核 164
7.7 制作文件系统 178
7.8 烧写各部分到目标板 181
第8章 简单设备驱动程序 186
8.1 按键 186
8.2 触摸屏 188
实 践 篇
第9章 Flash ROM存储器实例 198
9.1 S3C44B0X存储控制器 198
9.1.1 概述 198
9.1.2 功能描述 198
9.1.3 特殊功能寄存器 204
9.2 Flash ROM原理分析 210
9.2.1 Flash器件介绍 210
9.2.2 Flash读写操作 211
9.2.3 SST39VF1601芯片介绍 212
9.2.4 SST39VF1601芯片操作 213
9.3 实例 217
9.3.1 电路连接 217
9.3.2 硬件和寄存器设置 217
9.3.3 程序的编写 218
9.3.4 调试与运行结果 221
第10章 定时器中断实例 222
10.1 S3C44B0X中断机制分析 222
10.1.1 中断控制器 222
10.1.2 中断源与中断模式 225
10.1.3 中断优先级 227
10.1.4 其他特殊功能寄存器 228
10.2 PWM定时器 231
10.2.1 定时器结构概述 231
10.2.2 定时器操作 233
10.2.3 死区产生器 235
10.2.4 DMA请求模式 235
10.2.5 特殊功能寄存器 236
10.3 实例 240
10.3.1 寄存器设置 240
10.3.2 程序的编写 240
10.3.3 调试与运行结果 242
第11章 µC/OS-Ⅱ移植与应用实例 243
11.1 µC/OS-Ⅱ实时操作系统 243
11.1.1 实时操作系统概念 243
11.1.2 µC/OS-Ⅱ的文件结构 244
11.1.3 µC/OS-Ⅱ的任务与中断 244
11.1.4 µC/OS-Ⅱ中的任务函数 246
11.2 µC/OS-Ⅱ移植 253
11.2.1 移植条件和内容分析 253
11.2.2 OS_CPU.H 255
11.2.3 OS_CPU_A.ASM 258
11.2.4 OS_CPU_C.C 261
11.3 实例 263
11.3.1 配置OS_CFG.H文件 263
11.3.2 任务函数的编写 263
11.3.3 调试与运行结果 265
第12章 uClinux移植实例 267
12.1 Linux操作系统 267
12.1.1 Linux介绍 267
12.1.2 Linux内核 268
12.2 uClinux操作系统 271
12.2.1 uClinux介绍 271
12.2.2 uClinux文件结构 272
12.3 实例 274
12.3.1 寄存器配置和文件修改 274
12.3.2 编译过程 277
12.3.3 下载与运行结果 286
第13章 uClinux下网络驱动实例 288
13.1 TCP/IP网络协议介绍 288
13.1.1 以太网协议 288
13.1.2 ARP协议 289
13.1.3 ICMP协议 290
13.1.4 IP协议 290
13.1.5 UDP协议 291
13.1.6 TCP协议 291
13.1.7 FTP、HTTP等应用层 协议 292
13.2 Linux网络协议层 293
13.2.1 网络层次总体结构 293
13.2.2 驱动程序分析 295
13.3 实例 305
13.3.1 CS8900A芯片特点 305
13.3.2 CS8900A芯片驱动程序的 实现 307
13.3.3 网络驱动程序的编译 313
13.3.4 网络驱动程序的测试 314
第14章 图形用户界面实例 315
14.1 显示驱动接口 315
14.1.1 framebuffer驱动接口 315
14.1.2 qvfb虚拟驱动接口 316
14.2 MiniGUI图形界面工具 318
14.2.1 MiniGUI介绍与安装 318
14.2.2 MiniGUI使用基础 322
14.2.3 MiniGUI对话框、控件、 菜单与绘图 326
14.3 Qt embedded图形界面工具 335
14.3.1 Qt embedded介绍与安装 335
14.3.2 Qt embedded使用基础 337
14.3.3 Qt Designer介绍 341
14.4 实例 341
14.4.1 Qt Designer的使用 341
14.4.2 添加源代码 345
14.4.3 调试与运行结果 348