从51系列单片机的一般知识出发,将ARM处理器和51系列单片机进行对比,引导读者去理解和学习ARM处理器的知识。内容分为3部分:第1部分是前4章,从大家所熟悉的51系列单片机的基础知识开始,介绍ARM处理器的基本知识,包括ARM和51系列的对比、中断处理系统、寄存器和存储器结构等;第2部分是5~9章,详细比较ARM指令和51系列指令之间的差异,进一步阐述ARM指令的含义和使用方法,从简单的51系列编程经验出发,介绍ARM处理器软件编程方法;第3部分是后3章,介绍ARM处理器开发工具的使用。? ? ? 任何一个学习过51系列单片机的技术人员,借助《从51到ARM—32位嵌入式系统入门》都会很容易地学会ARM处理器的一般知识,了解软件设计的基本方法,并且能够使用开发工具进行程序编辑、编译、连接和调试,成为一个初步懂得ARM并可以进行软件设计的工程师。? ? ? 《从51到ARM—32位嵌入式系统入门》可供电子信息类大学生、研究生或电子设计工程师阅读参考。? 从51到ARM-32位嵌入式系统入门目录 第1章 几个基本概念 1.1 从51系列单片机到ARM处理器1 1.2 ARM不是单片机2 1.3 51系列单片机和ARM处理器的比较3 1.4 以ARM为核的单片机4 1.4.1 处理器内核只和外部地址相关4 1.4.2 ARM怎样组成一个单片机6 1.4.3 一点启示7 第2章 ARM处理器基础 2.1 ARM处理器的数据格式8 2.1.1 基础知识8 2.1.2 ARM处理器的存储器结构9 2.1.3 ARM处理器的指令存储或数据存储13 2.1.4 地址对准15 2.2 处理器模式15 2.3 ARM内部寄存器17 2.3.1 ARM状态时的寄存器17 2.3.2 Thumb状态下的寄存器25 2.4 异常27 第3章 ARM7TDMI简介 3.1 概述29 3.2 结构和框图30 3.3.3 级流水线结构33 3.4 ARM处理器的寻址方式35 3.4.1 51系列与ARM系列寻址方法的比较35 3.4.2 寄存器寻址36 3.4.3 立即寻址36 3.4.4 寄存器移位寻址37 3.4.5 寄存器间接寻址39 3.4.6 变址寻址40 3.4.7 多寄存器寻址42 3.4.8 堆栈寻址42 3.4.9 寻址方式的应用43 3.4.1 0ARM指令寻址一览表44 第4章 异常和中断 4.1 概述45 4.2 复位异常46 4.3 未定义指令异常47 4.4 软件中断异常49 4.5 预取指中止异常49 4.6 数据中止异常50 4.7 中断请求(IRQ)异常 51 4.8 快速中断(FIQ)请求异常52 4.9 中断源和中断优先级53 4.10 异常中断的进入和退出54 第5章 ARM指令集 5.1 概述56 5.2 指令可选后缀59 5.2.1 S后缀60 5.2.2 后缀60 5.2.3 B后缀61 5.2.4 T后缀61 5.2.5 条件后缀62 5.3 ARM数据传送指令(存储器访问指令)64 5.3.1 关于数据传送64 5.3.2 数据传送中的几个问题66 5.3.3 ARM数据传送指令代码表70 5.3.4 数据传送指令代码详述71 5.4 ARM分支指令93 5.4.1 关于程序分支93 5.4.2 ARM分支指令详解94 5.5 ARM数据处理指令98 5.5.1 ARM数据处理指令的特点98 5.5.2 第2操作数99 5.5.3 ARM数据处理指令代码表101 5.5.4 ARM数据处理指令详述103 5.6 ARM指令集中和协处理器有关的指令120 5.7 ARM指令集中的软件中断指令125 第6章 Thumb指令集 6.1 Thumb指令的特点129 6.2 Thumb指令和ARM指令的比较132 6.3 Thumb指令集中的数据传送类指令134 6.4 Thumb指令集中的分支指令146 6.5 Thumb指令集中的数据处理指令152 6.6 Thumb指令集中的软件中断指令164 第7章 伪指令 7.1 伪指令概述166 7.2 与ARM指令相关的伪指令167 7.3 与Thumb指令相关的伪指令177 7.4 通用伪指令180 7.4.1 为变量定义和赋值的伪指令180 7.4.2 定义各类寄存器名称的伪指令184 7.4.3 数据定义伪指令187 7.4.4 控制程序流向的伪指令196 7.4.5 其他伪指令201 第8章 ARM系统设计和程序设计 8.1 关于ARM处理器,我们学到了什么?207 8.2 程序设计的几个问题209 8.3 ARM指令和 Thumb指令的兼容性214 8.4 汇编程序规则221 8.4.1 组成222 8.4.2 书写格式223 8.4.3 汇编语言中的表达式224 8.5 汇编程序举例231 第9章 C和C++语言的应用 9.1 汇编语言与C/C++语言的比较237 9.2 C/C++语言的编程规范238 9.2.1 注释238 9.2.2 命名239 9.2.3 编辑风格239 9.3 如何编写针对ARM的高效C语言程序240 9.3.1 以空间换时间240 9.3.2 使用数学方法解决问题242 9.3.3 使用位操作242 9.3.4 嵌入汇编243 9.4 C、C++语言与汇编语言的混合编程244 9.4.1 在C、C++程序中使用内嵌的汇编指令的语法格式244 9.4.2 在C、C++程序中使用内嵌的汇编指令的注意事项245 9.4.3 内嵌汇编指令的应用举例247 9.4.4 从汇编程序中访问C程序变量248 9.4.5 在C++程序中使用C程序头文件249 9.4.6 汇编程序、C程序以及C++程序的相互调用举例250 第10章 程序的编辑和编译 10.1 程序设计过程254 10.1.1 编辑程序254 10.1.2 编译程序255 10.1.3 连接和调试程序257 10.2 ARM处理器开发工具介绍258 10.2.1 ARM处理器仿真系统特点258 10.2.2 ADS集成开发环境259 10.2.3 ADS开发系统的系统资源261 10.2.4 系统软件开发的步骤263 10.3 程序的编辑263 10.3.1 源程序是可移植的263 10.3.2 在CodeWarrior for ADS环境下编辑源文件266 10.3.3 建立工程项目总结271 10.3.4 建立C语言和C++语言源文件271 10.3.5 文件的管理272 10.3.6 编辑画面的设置273 10.3.7 ADS编辑功能介绍279 10.3.8 屏幕分割设置282 10.4 程序的编译283 10.4.1 有两种方式可以实现程序的编译283 10.4.2 命令行中的可选项和图形方式中的可选项286 10.4.3 ADS中的可选项290 10.5 汇编器的应用291 10.5.1 ARM汇编器armasm中的可选项291 10.5.2 ARM汇编器应用298 10.5.3 应用举例300 10.6 编译器的应用303 10.6.1 ARM编译器中的可选项303 10.6.2 ARM编译器的应用317 第11章 程序的连接 11.1 几个与连接有关的概念320 11.2 连接器的应用326 11.3 连接器选项设置334 11.4 连接器应用举例347 第12章 ARM调试工具AXD 12.1 调试工具AXD361 12.1.1 ARM调试工具介绍361 12.1.2 调试工具AXD的使用方法363 12.2 在调试过程中使用断点371 12.2.1 设置断点371 12.2.2 执行到断点处374 12.2.3 查找和修改断点374 12.2.4 断点管理下拉菜单374 12.2.5 观察断点375 12.2.6 删除断点376 12.3 AXD中其他工具介绍376 12.3.1 使用观测项376 12.3.2 在调试程序时观察变量381 12.3.3 在调试程序时使用符号表383 12.3.4 使用观测点384 12.3.5 工具栏中的工具387 12.4 数据格式389 12.4.1 设置数据格式389 12.4.2 设置默认的数据显示格式393
|