ARM处理器是一种16/32位的高性能、低成本、低功耗的嵌入式RISC微处理器,由ARM公司设计,然后授权给各半导体厂商生产,它目前已经成为应用最为广泛的嵌入式处理器。\r\n本书分14章对ARM处理器的体系结构、指令系统和开发工具作了比较全面的介绍。其中包括ARM体系介绍、ARM程序设计模型、ARM汇编语言程序设计、ARM C/C++语言程序设计、ARM连接器的使用、ARM集成开发环境CodeWarrior IDE的介绍及高性能的调试工具ADW的使用。并在此基础之上介绍一些典型的基于ARM体系的嵌入式应用系统设计时的基本技术。通过阅读本书可以使读者掌握开发基于ARM的应用系统的各方面的知识。\r\n本书既可作为学习ARM技术的培训材料,也可作为嵌入式系统开发人员的参考手册。\r\n
第1章 ARM概述及其基本编程模型 \r\n\r\n 1. 1 ARM技术的应用领域及其特点 \r\n\r\n 1. 2 ARM体系结构的版本及命名方法 \r\n\r\n 1. 2. 1 ARM体系结构的版本 \r\n\r\n 1. 2. 2 ARM体系的变种 \r\n\r\n 1. 2. 3 ARM/Thumb体系版本的命名格式 \r\n\r\n l. 3 ARM处理器系列 \r\n\r\n 1. 3. 1 ARM7系列 \r\n\r\n 1. 3. 2 ARM9系列 \r\n\r\n 1. 3. 3 ARM9E系列 \r\n\r\n 1. 3. 4 ARM1OE系列 \r\n\r\n 1. 3. 5 SecurCore系列 \r\n\r\n l. 4 ARM处理器模式 \r\n\r\n 1. 5 ARM寄存器介绍 \r\n\r\n 1. 5. l 通用寄存器 \r\n\r\n 1. 5. 3 程序状态寄存器 \r\n\r\n 1. 6 ARM体系的异常中断 \r\n\r\n 1. 6. 1 ARM中异常中断种类 \r\n\r\n 1. 6. 2 ARM处理器对异常中断的响应过程 \r\n\r\n 1. 6. 3 从异常中断处理程序中返回 \r\n\r\n 1. 7 ARM体系中存储系统 \r\n\r\n 1. 7. 1 ARM体系中的存储空间 \r\n\r\n 1. 7. 2 ARM存储器格式 \r\n\r\n 1. 7. 3 非对齐的存储访问操作 \r\n\r\n 1. 7. 4 指令预取和自修改代码 \r\n\r\n \r\n\r\n 第2章 ARM指令分类及其寻址方式 \r\n\r\n 2. 1 ARM指令集概要介绍 \r\n\r\n 2. 1. 1 ARM指令的分类 \r\n\r\n 2. 1. 2 ARM指令的一般编码格式 \r\n\r\n 2. 1. 3 ARM指令的条件码域 \r\n\r\n 2. 2 ARM指令寻址方式 \r\n\r\n 2. 2. l 数据处理指令的操作数的寻址方式 \r\n\r\n 2. 2. 2 字及无符号字节的Load/Store指令的寻址方式 \r\n\r\n 2. 2. 3 杂类Load/Store指令的寻址方式 \r\n\r\n 2. 2. 4 批量Load/Store指令的寻址方式 \r\n\r\n 2. 2. 5 协处理器Load/Store指令的寻址方式 \r\n\r\n \r\n\r\n 第3章 ARM指令集介绍 \r\n\r\n 3. 1 ARM指令集 \r\n\r\n 3. 1. l 跳转指令 \r\n\r\n 3. l. 2 数据处理指令 \r\n\r\n 3. 1. 3 乘法指令 \r\n\r\n 3. 1. 4 杂类的算术指令 \r\n\r\n 3. 1. 5 状态寄存器访问指令 \r\n\r\n 3. l. 6 Load/Store内存访问指令 \r\n\r\n 3. 1. 7 批量Load/Store内存访问指令 \r\n\r\n 3. 1. 8 信号量操作指令 \r\n\r\n 3. 1. 9 异常中断产生指令 \r\n\r\n 3. 1. 10 ARM协处理器指令 \r\n\r\n 3. 2 一些基本的ARM指令功能段 \r\n\r\n 3. 2. l 算术逻辑运算指令的应用 \r\n\r\n 3. 2. 2 跳转指令的应用 \r\n\r\n 3. 2. 3 Loacl/Store指令的应用 \r\n\r\n 3. 2. 4 批量Load/Store指令的应用 \r\n\r\n 3. 2. 5 信号量指令的应用 \r\n\r\n 3. 2. 6 与系统相关的一些指令代码段 \r\n\r\n 3. 3 Thumb指令介绍 \r\n\r\n \r\n\r\n 第4章 ARM汇编语言程序设计 \r\n\r\n 4. 1 伪操作 \r\n\r\n 4. 1. l 符号定义伪操作 \r\n\r\n 4. 1. 2 数据定义伪操作 \r\n\r\n 4. 1. 3 汇编控制伪操作 \r\n\r\n 4. 1. 4 栈中数据帧描述伪操作 \r\n\r\n 4. 1. 5 信息报告伪操作 \r\n\r\n 4. 1. 6 其他的伪操作 \r\n\r\n 4. 2 ARM汇编语言伪指令 \r\n\r\n 4. 3 ARM汇编语言语句格式 \r\n\r\n 4. 3. 1 ARM汇编语言中的符号 \r\n\r\n 4. 3. 2 ARM汇编语言中的表达式 \r\n\r\n 4. 4 ARM汇编语言程序格式. \r\n\r\n 4. 4. l 汇编语言程序格式 \r\n\r\n 4. 4. 2 汇编语言子程序调用 \r\n\r\n 4. 5 ARM汇编编译器的使用 \r\n\r\n 4. 6 汇编程序设计举例 \r\n\r\n 4. 6. 1 ARM中伪操作使用实例 \r\n\r\n 4. 6. 2 ARM中汇编程序实例 \r\n\r\n \r\n\r\n 第5章 ARM存储系统 \r\n\r\n 5. 1 ARM存储系统概述 \r\n\r\n 5. 2 ARM中用于存储管理的系统控制协处理器CP15 \r\n\r\n 5. 2. 1 访问CP15寄存器的指令 \r\n\r\n 5. 2. 2 CP15中的寄存器 \r\n\r\n 5. 3 存储器管理单元MMU \r\n\r\n 5. 3. l 存储器管理单元MMU概述 \r\n\r\n 5. 3. 2 禁止/使能MMU \r\n\r\n 5. 3. 3 MMU中地址变换过程 \r\n\r\n 5. 3. 4 MMU中存储访问权限控制 \r\n\r\n 5. 3. 5 MMU中的域 \r\n\r\n 5. 3. 6 关于快表的操作 \r\n\r\n 5. 3. 7 ARM中的存储访问失效 \r\n\r\n 5. 4 高速缓冲存储器和写缓冲区 \r\n\r\n 5. 4. 1 基本概念 \r\n\r\n 5. 4. 2 cache的工作原理和地址映像方法 \r\n\r\n 5. 4. 3 cache的分类 \r\n\r\n 5. 4. 4 cache的替换算法 \r\n\r\n 5. 4. 5 缓冲技术的使用注意事项 \r\n\r\n 5. 4. 6 存储系统的一致性问题 \r\n\r\n 5. 4. 7 cache内容锁定 \r\n\r\n 5. 4. 8 与cache和写缓冲区相关的编程接口 \r\n\r\n 5. 5 快速上下文切换技术 \r\n\r\n 5. 5. l 快速上下文切换技术原理 \r\n\r\n 5. 5. 2 快速上下文切换技术编程接口 \r\n\r\n 5. 6 与存储系统相关的程序设计指南 \r\n\r\n 5. 6. l 地址空间 \r\n\r\n 5. 6. 2 存储器格式 \r\n\r\n 5. 6. 3 非对齐的存储访问操作 \r\n\r\n 5. 6. 4 指令预取和自修改代码 \r\n\r\n 5. 6. 5 IMB \r\n\r\n 5. 6. 6 存储器映射的I/O空间 \r\n\r\n 5. 7 AIOA存储系统的实例 \r\n\r\n 5. 7. 1 L7205的存储系统概述 \r\n\r\n 5. 7. 2 L7205中的SDRAM \r\n\r\n 5. 7. 3 L7205中的 MMU \r\n\r\n \r\n\r\n 第6章 ATPCS介绍 \r\n\r\n 6. 1 ATPCS概述 \r\n\r\n 6. 2 基本ATPCS \r\n\r\n 6. 2. l 寄存器的使用规则 \r\n\r\n 6. 2. 2 数据栈使用规则 \r\n\r\n 6. 2. 3 参数传递规则 \r\n\r\n 6. 3 几种特定的ATPCS \r\n\r\n 6. 3. l 支持数据栈限制检查的ATPCS \r\n\r\n 6. 3. 2 支持只读段位置无关(ROPI)的ATPCS \r\n\r\n 6. 3. 3 支持可读写段位置无关(RWPI)的ATPCS \r\n\r\n 6. 3. 4 支持ARM程序和Thumb程序混合使用的ATPCS \r\n\r\n 6. 3. 5 处理浮点运算的ATPCS \r\n\r\n \r\n\r\n 第7章 ARM程序和Thumb程序混合使用 \r\n\r\n 7. 1 概述 \r\n\r\n 7. 2 在汇编语言程序中通过用户代码支持interwork \r\n\r\n 7. 2. l 可以实现程序状态切换的指令 \r\n\r\n 7. 2. 2 与程序状态切换相关的伪操作 \r\n\r\n 7. 2. 3 进行状态切换的汇编程序实例 \r\n\r\n 7. 3 在C/C++程序中实现interwork \r\n\r\n 7. 4 在汇编语言程序中通过连接器支持interwork \r\n\r\n 7. 4. l 利用veneers实现汇编程序间的程序状态切换 \r\n\r\n 7. 4. 2 利用veneers实现汇编程序与C/C++程序间的程序状态切换 \r\n\r\n \r\n\r\n 第8章 C\C++以及汇编语言的混合编程 \r\n\r\n 8. l 内嵌汇编器的使用 \r\n\r\n 8. 1. l 内嵌的汇编指令用法 \r\n\r\n 8. 1. 2 内嵌的汇编器和armasm的区别 \r\n\r\n 8. l. 3 在C\C++程序中使用内嵌的汇编指令 \r\n\r\n 8. 1. 4 内嵌汇编指令的应用举例 \r\n\r\n 8. 2 从汇编程序中访问C程序变量 \r\n\r\n 8. 3 汇编程序.C程序以及C++程序的相互调用 \r\n\r\n 8. 3. l 在C++程序中使用C程序头文件 \r\n\r\n 8. 3. 2 汇编程序.C程序以及C++程序的相互调用举例 \r\n\r\n \r\n\r\n 第9章 异常中断处理 \r\n\r\n 9. 1 ARM中异常中断处理概述 \r\n\r\n 9. 1. 1 ARM体系中异常中断种类 \r\n\r\n 9. 1. 2 异常中断向量表及异常中断优先级 \r\n\r\n 9. 1. 3 异常中断使用的寄存器 \r\n\r\n 9. 2 进入和退出异常中断的过程 \r\n\r\n 9. 2. 1 ARM处理器对异常中断的响应过程 \r\n\r\n 9. 2. 2 从异常中断处理程序中返回 \r\n\r\n 9. 3 在应用程序中安装异常中断处理程序 \r\n\r\n 9. 3. 1 在系统复位时安装异常中断处理程序 \r\n\r\n 9. 3. 2 在C程序中安装异常中断处理程序 \r\n\r\n 9. 4 SWI异常中断处理程序 \r\n\r\n 9. 4. 1 SWI异常中断处理程序的实现 \r\n\r\n 9. 4. 2 SWI异常中断调用 \r\n\r\n 9. 5 FIQ和IRQ异常中断处理程序 \r\n\r\n 9. 5. 1 IRQ/FIQ异常中断处理程序 \r\n\r\n 9. 5. 2 IRQ异常中断处理程序举例 \r\n\r\n 9. 6 复位异常中断处理程序 \r\n\r\n 9. 7 未定义指令异常中断 \r\n\r\n 9. 8 指令预取中止异常中断处理程序 \r\n\r\n 9. 9 数据访问中止异常中断处理程序 \r\n\r\n \r\n\r\n 第10章 ARM C/0++编译器 \r\n\r\n 10. 1 ARM C/C++编译器概述 \r\n\r\n 10. 1. 1 ARM C/C++编译器及语言库介绍 \r\n\r\n 10. l. 2 ARM编译器中与搜索路径相关的一些基本概念 \r\n\r\n 10. 2 ARM编译器命令行格式 \r\n\r\n 10. 2. l 过程调用标准 \r\n\r\n 10. 2. 2 设置源程序语言类型 \r\n\r\n 10. 2. 3 指定搜索路径 \r\n\r\n 10. 2. 4 设置预处理选项 \r\n\r\n 10. 2. 5 设置输出文件类型 \r\n\r\n 10. 2. 6 指定目标处理器和ARM体系版本 \r\n\r\n 10. 2. 7 生成调试信息 \r\n\r\n 10. 2. 8 代码生成的控制 \r\n\r\n 10. 2. 9 控制警告信息的产生 \r\n\r\n 10. 2. 10 编译时进行的一些额外的检查 \r\n\r\n 10. 2. 11 控制错误信息 \r\n\r\n 10. 3 ARM编译器中的pragmas \r\n\r\n 10. 4 ARM编译器特定的关键词 \r\n\r\n 10. 4. 1 用于声明函数的关键词 \r\n\r\n 10. 4. 2 用于声明交量的关键词 \r\n\r\n 10. 4. 3 用于限定数据类型的关键词 \r\n\r\n 10. 5 ARM编译器支持的基本数据类型 \r\n\r\n 10. 6 ARM编译器中预定义宏 \r\n\r\n 10. 7 ARM中C/C++库 \r\n\r\n 10. 7. 1 ARM中C/C++运行时库概述 \r\n\r\n 10. 7. 2 建立一个包含C/C++运行时库的C/C++应用程序 \r\n\r\n 10. 7. 3 建立不包含C运行时库的应用程序 \r\n\r\n 10. 7. 4 裁减C/C++运行时库以适应特定的目标运行环境 \r\n\r\n \r\n\r\n 第11章 ARM连接器 \r\n\r\n 11. 1 ARM映像文件 \r\n\r\n 11. 1. 1 ARM映像文件的组成 \r\n\r\n 11. 1. 2 ARM映像文件的入口点 \r\n\r\n 11. 1. 3 输入段的排序规则 \r\n\r\n 11. 2 ARM连接器介绍 \r\n\r\n 11. 3 ARM连接器生成的符号 \r\n\r\n 11. 3. 1 连接器生成的与域相关的符号 \r\n\r\n 11. 3. 2 连接器生成的与输出段相关的符号 \r\n\r\n 11. 3. 3 连接器生成的与输入段相关的符号 \r\n\r\n 11. 4 连接器的优化功能 \r\n\r\n 11. 5 运行时库的使用 \r\n\r\n 11. 5. 1 C/C++运行时库与目标文件 \r\n\r\n 11. 5. 2 查找需要的C/C++运行时库 \r\n\r\n 11. 5. 3 选择合适种类的C/C++运行时库 \r\n\r\n 11. 5. 4 扫描C/C++运行时库 \r\n\r\n 11. 6 从一个映像文件中使用另一个映像文件中的符号 \r\n\r\n 11. 6. 1 symdefs文件 \r\n\r\n 11. 6. 2 建立symdefs文件 \r\n\r\n 11. 6. 3 symdefs文件的使用 \r\n\r\n 11. 7 隐藏或者重命名全局符号 \r\n\r\n 11. 7. l steering文件的格式 \r\n\r\n 11. 7. 2 steering文件中的命令 \r\n\r\n 11. 8 ARM连接器命令行选项 \r\n\r\n 11. 9 使用scatter文件定义映像文件的地址映射 \r\n\r\n 11. 9. l scatter文件概述 \r\n\r\n 11. 9. 2 satter文件中各部分介绍 \r\n\r\n 11. 9. 3 scatter文件使用举例 \r\n\r\n \r\n\r\n 第12章 嵌入式应用程序示例 \r\n\r\n 12. l 嵌入式应用程序设计的基本知识 \r\n\r\n 12. 1. 1 嵌入式应用系统中的存储映射 \r\n\r\n 12. 1. 2 系统初始化 \r\n\r\n 12. 2 使用semihosting的 C语言程序示例 \r\n\r\n 12. 2. 1 源程序分析 \r\n\r\n 12. 2. 2 生成映像文件 \r\n\r\n 12. 3 一个嵌入式应用系统示例 \r\n\r\n 12. 3. l 源程序分析 \r\n\r\n 12. 3. 2 生成映像文件 \r\n\r\n 12. 3. 3 本例中地址映射模式 \r\n\r\n 12. 4 进行ROM/RAM地址重映射的嵌入式应用系统 \r\n\r\n 12. 4. l 地址映射模式 \r\n\r\n 12. 4. 2 源程序分析 \r\n\r\n 12. 4. 3 生成映像文件 \r\n\r\n 12. 5 一个嵌入式操作系统示例 \r\n\r\n \r\n\r\n 第13章 使用CodeWarrior \r\n\r\n 13. 1 CodeWarrior for ADS概述 \r\n\r\n 13. 2 简单工程项目的使用 \r\n\r\n 13. 2. 1 工程项目窗口 \r\n\r\n 13. 2. 2 简单工程项目的使用 \r\n\r\n 13. 3 配置生成目标 \r\n\r\n 13. 3. 1 Debug Settings对话框介绍 \r\n\r\n 13. 3. 2 设置牛成目标的基本选项 \r\n\r\n 13. 3. 3 汇编器选项设置 \r\n\r\n 13. 3. 4 编译器的选项设置 \r\n\r\n 13. 3. 5 连接器的选项设置 \r\n\r\n 13. 3. 6 fromELF工具的选项设置 \r\n\r\n 13. 4 复杂工程项目的使用 \r\n\r\n 13. 4. l 建立一个新的生成目标 \r\n\r\n 13. 4. 2 将一个生成目标更名 \r\n\r\n 13. 4. 3 建立生成目标之间的依赖关系 \r\n\r\n 13. 4. 4 子工程项目的使用 \r\n\r\n 13. 5 工程项目模板 \r\n\r\n 13. 5. 1 ADS中工程项目模板的使用 \r\n\r\n 13. 5. 2 建立用户工程项目模板 \r\n\r\n 13. 6 编译和连接工程项目 \r\n\r\n 13. 6. 1 编译文件 \r\n\r\n 13. 6. 2 生成工程项目 \r\n\r\n \r\n\r\n 第14章 ARM体系中的调试方法 \r\n\r\n 14. 1 ARM体系中调试系统概述 \r\n\r\n 14. 2 基于Angel的调试系统 \r\n\r\n 14. 2. l 基于Angel的调试系统的概述 \r\n\r\n 14. 2. 2 使用Angel开发应用程序 \r\n\r\n 14. 2. 3 Angel执行的操作 \r\n\r\n 14. 2. 4 将Angel移植到特定的目标系统 \r\n\r\n 14. 3 基于JTAG的调试系统 \r\n\r\n 14. 3. l 基于JTAG的调试系统的特点 \r\n\r\n 14. 3. 2 基于JTAG的调试系统结构 \r\n\r\n 14. 3. 3 目标系统中的调试功能扩展部件 \r\n\r\n 14. 3. 4 基于JTAG的调试过程 \r\n\r\n 14. 4 ADW使用介绍 \r\n\r\n 14. 4. 1 ADW概述 \r\n\r\n 14. 4. 2 ADW中的窗口 \r\n\r\n 14. 4. 3 ADW使用介绍
嵌入式系统是指以应用为中心, 以计算机技术为基础, 软件硬件可裁剪, 适应应用系统对功能. 可靠性. 成本. 体积和功耗严格要求的专用计算机系统. 它并不是最近出现的新技术, 只是随着微电子技术和计算机技术的发展, 微控制芯片功能越来越强大, 而嵌入微控制芯片的设备和系统越来越多, 从而使得这种技术越来越引人注目. 嵌入式系统与通用的计算机系统既有相似之处, 也有明显的区别. 通常, 嵌入式系统中的系统程序(包括操作系统)和应用程序是浑然一体的, 这些程序被编译连接成一个可以执行的二进制映像文件(image), 这个二进制映像文件被固化在系统中, 在系统复位后自动执行. 嵌入式系统的开发系统和实际运行的系统并不相同, 需要交叉编译系统和适当的调试系统.
ARM嵌入式处理器是一种高性能. 低功耗的RISC芯片. 它由英国ARM公司设计, 世界上几乎所有的主要半导体厂商都生产基于ARM体系结构的通用芯片, 或在其专用芯片中嵌入 ARM的相关技术. 如TI, Motorola, Intel, NS, Ateml, Philips, Altera, Agilent, Atmel, Hynix, Nec, Sharp, Triscend, NEC, CirrusLogic, SAMSUNG和LINKUP等公司都有相应的产品. 目前ARM芯片广泛应用于无线产品. PDA. GPS. 网络. 消费电于产品. STB及智能卡. 在2001年, 基于ARM内核的处理器年产量突破5亿个, 市场份额超过了75%, 已经成为业界的龙头. 本书比较全面地介绍基于ARM技术的嵌入式应用系统的开发技术.
本书的主要读者
本书对ARM处理器的体系结构. 指令系统. 开发工具作了比较全面的介绍. 并在此基础之上讨论一些典型的基于ARM体系嵌入式应用系统设计时的基本技术. 通过阅读本书可以使读者能够掌握开发基于ARM的应用系统的各方面的知识. 它既可作为学习ARM技术的培训材料, 也可作为嵌入式系统开发人员的参考手册.
本书主要内容
本书以可执行的二进制映像文件(image)购中心, 介绍基于ARM微处理器的嵌入式系统的开发过程所涉及的知识, 主要包括以下几部分.
image文件的“原材料”, 包括*. c. *. h. *. obj. *. asm及*. lib文件. 这些文件包括操作系统, 通常以*. lib形式提供, 也有一些操作系统提供源代码, 可以为*. c. *. h. *.asm, BSP(其实也是操作系统的一部分, 因为它对于不同的计算机主板是不同的, 这里将其单独列出), 它通常为*. c. *. h. *. asm.
语言库(如C语言运行库), 通常为*. lib, 用户自己的应用程序, 通常为*.c. *. h. *. asm”
本书将对应地介绍:ARM的体系结构, ARM系统的指令系统, ARM汇编语言, 对应于*.asm文件: ARM C语言的独到部分(与标准C相同部分这里不作介绍), 对应于*.c, ARM的编程指南, ARM的编译器使用. 在本书中还介绍了ARM公司提供的集成开发环境CodeWarrior IDE的使用方法. 这一部分是ARM微处理器的基本知识, 将在本书中占很大部分.
image文件各部分的组织方法以及在内存中的安排.
本书将对应地介绍ELF格式的映像文件的组成, ARM连接器的使用:程序在ROM中的存放技术.
image文件中各部分的功能.
本书将对应地介绍一个嵌入式系统各部分的功能, 着重介绍系统启动部分的设计.
这部分是嵌入式系统涉及的难点, 将通过一些实例来介绍.
image的调试.
本书主要介绍ARM公司的调试工具ADW的使用方法. 同时介绍了嵌入式系统的基本调试方法.
本书结构安排
全书包括下面14章.
第1章简要介绍了ARM公司的情况以及基于ARM技术的嵌入式系统的应用情况, 比较详细地介绍了当前ARM体系结构的主要版本:简要介绍了目前ARM处理器的种类及其主要特点. 通过这一章的介绍, 读者可以对ARM技术有一个总体的了解.
第2章介绍了ARM编程模型的基本知识. 主要包括ARM处理器模式. ARM体系中的寄存器及其使用方式. ARM体系中异常中断处理的基本概念以及ARM体系中存储访问的基本知识. 通过这一章的介绍, 读者将了解ARM编程模型的基本知识, 为详细了解ARM程序设计的各项技术打好基础.
第3章详细介绍了ARM体系的指令系统以及寻址方式. 在本章中介绍了ARM指令集和Thumb指令集各自的应用领域. 没有详细介绍Thumb指令集, 并不是因为Thumb指令集不重要, 而是因为从功能上来讲它是ARN指令集的子集, 在了解ARM指令集的基础上很容易理解Thumb指令. 介绍了各指令的编码格式. 语法格式. 执行的操作以及应用方法. 在本章的最后, 还介绍了一些常用的ARM指令代码段, 帮助用户进一步理解各指令的用法, 积累一些ARM代码设计的基本方法.
第4章介绍了ARM汇编语言程序设计的基本方法以及ARM汇编器armasm的使用方法. 其中包括ARM汇编语言中的伪操作(directives). 宏指令(pseudo-instruction). 汇编语言格式. armasm的使用方法以及一些汇编语言程序实例. 通过本章的介绍, 读者可以掌握ARM汇编语言设计的方法.
第5章介绍ARM体系的存储系统. 在一个嵌入式系统中, 存储系统是非常重要的一部分. 本章中介绍了AIOA体系中用于存储管理的协处理器 CPIS. 存储管理单元MMU. 写缓冲以及Cache. 快速上下文切换技术, 还介绍了有关存储系统的程序设计. 并以LinkUp公司ARM处理器芯片L7210中的存储系统为例, 介绍了ARM存储系统的设计技术. 在本章中没有介绍存储保护单元MPU, 这是因为MPU更简单, 而MMU的应用更为广泛. 在本章中对于虚拟存储技术. 缓冲技术以及cache技术都作了比较详细的介绍, 使那些从事基于低端单片机应用的开发人员更容易理解ARM体系中存储系统的设计技术.
第6章介绍ARM/Thumb过程调用的标准. 为了能使单独编译的C语言程序和汇编程序之间相互调用, 必须为子程序间的调用制定一定的规则. ATPCS规定了ARM程序和Thumb程序中子程序调用的基本规则. 这些基本规则包括子程序调用过程中寄存器的使用规则. 数据栈的使用规则和参数的传递规则等. 同时, 本章还介绍了支持数据栈检查的ATPCS以及与代码/数据位置无关的ATPCS.
第7章介绍ARM程序和Thumb程序混合使用的方法. 如果程序遵守支持AIUvi程序和Thumb程序混合使用的ATPCS, 则程序中ARM子程序和Thumb子程序可以相互调用. 对于C/C, 十源程序而言, 只要在编译时指定-apcs/interwork选项, 编译器生成的代码就遵守支持ARM程序和Thumb程序混合使用的 ATPCS. 而对于汇编源程序而言, 用户必须保证编写的代码遵守支持ARM程序和 Thumb程序混合使用的ATPCS. 本章将介绍相关的选项和编程技术.
第8章介绍了ARM汇编程序以及C/C+十程序之间相互调用的技术. 其中介绍了C编译器中内嵌的汇编器的使用方法.
第9章详细介绍了ARM体系中异常中断技术. 其中包括异常中断处理的处理过程, 各种异常中断处理的进人和返回机制, 在应用程序中使用异常中断处理的方法以及各种异常中断的详细使用技术.
第10章主要介绍ARM体系中C/C++语言程序设计的基本知识. 其中包括了ARMC/C++语言的一些特性, ARM C/C++编译器的使用方法, 以及ARM C/C++运行时库的使用方法. 通过本章的介绍, 可以使读者掌握开发嵌入式C/C++应用程序的基本知识和方法, 进一步了解嵌入式应用系统的特点.
第11章介绍了如何由目标文件以及库文件得到可执行的映像文件. 其中包括ELF格式的可执行映像文件的组成, ARM连接器的使用方法, 以及连接过程所执行的各种操作. 最后通过一些实例介绍了在映像文件中各部分内容的地址映射关系.
第12章介绍了嵌入式应用程序设计的基本知识, 然后通过几个示例具体说明嵌入式应用程序的设计方法. 对于每个示例不仅详细介绍了程序设计的要点, 而且介绍了如何使用ARM开发工具编译. 连接这些程序, 生成映像文件. 本章是对前面几章知识的综合应用.
第13章介绍了CodeWarriorIDE集成开发环境的使用方法. 其中着重介绍了在CodeWarrior IDE中工程项目的使用方法以及生成目标的设置方法. 这些知识是使用CodeWarrior IDE进行应用程序开发时最为重要的部分.
第14章介绍了ARM体系的调试系统以及ARM公司的高性能的调试工具 ADW的使用方法. ADW的功能非常多, 本书并不是一本专门介绍ADW的书. 因而只是介绍了其一些基本功能和嵌入式系统的基本调试方法.
阅读本书时的注意事项
在嵌入式应用系统的开发技术中涉及到很多名词术语, 本书力图使用在国内单片机技术领域通用的一些名词术语, 但是还是有一些ARM体系中特有的名词术语很难翻译. 本书中很多词是按照其技术含义来表达的, 而不是按单词直接翻译. 同时, 对于一些名词术语, 本书在括号内给出了其英文名称, 便于读者理解.
对于ARM指令系统, 本书给出了详细的介绍, 是希望该部分能作为编写ARM汇编程序的开发人员的参考资料, 提高开发人员工作效率. 而对于其他部分, 着重介绍了相关的概念和基本技术.
本书在编写过程中, 得到了ARM(上海)的大力支持, 在此表示衷心的感谢.
参考文献
l. Kai Hwang著. 王鼎兴, 沈美明等译《高等计算机系统结构并行性可扩展性可编程性》北京:清华大学出版社 1995
2. 郑纬民, 汤志忠编著. 《计算机系统结构》北京:清华大学出版社 1998
3. Nucleus PLUS Reference manual. Accelerated Technology
4. L7200-05SDB-HW users manual. LinkUp Systems Corporation 2000
5. L7210 Data Book Rev 12. LinkUp Systems Corporation 2000
6. DD10100E_ARM_ARM. AAN Limited 2000
7. DUI0068B_ADS1_2_Assembler. ARM Limited 2001
8. DUI015lA_ADS1_2_LinkUt. ARM Limied 2001
9. DUI0067D_ADS1_2_CompLib. ARM Limited 2001
10. DUI0065D_ADS1_2_CodeWarrior. ARM Limited2 001
11. DUI0058D_ADS1_2_DebugTarg. ARMLimited2001
12. DDI0192A_720T_R3. ARM Limited 2000
13. DAI0048A_scatterload. ARM Limited 1998
14. Adam Caly. Flash Memory Loader Selected Aspects to Consider During Design and Implementation. Motorola, Inc.
15. Dennis Edwards. Executing Out of ROM. 2002 Embedded Systems Conference, San Francisco