### 嵌入式ARM经典300问知识点解析 #### 第1章 体系结构 **知识点1:初始化CPU堆栈时的处理器模式** - **问题背景**:在嵌入式系统开发过程中,初始化阶段非常重要,它直接关系到系统的稳定性和性能。 - **知识点概述**:当嵌入式系统启动时,处理器会进入一个特定的工作模式,通常称为复位模式或者管理模式。这是因为在复位后,处理器需要处理一些关键的初始化任务,如设置堆栈指针、配置中断向量表等。 **知识点2:MOV指令中的8位图立即数** - **问题背景**:ARM汇编语言中,MOV指令用于移动数据,但该指令接受的立即数有一定的限制。 - **知识点概述**:在ARM架构中,某些指令(如MOV)允许使用8位图立即数。这类立即数实际上是通过将一个8位的数值进行循环右移偶数位得到的。例如,0xF0000001可以通过0x1F经过四次右移得到。这种设计是为了满足指令长度的限制,同时确保一定的灵活性。 **知识点3:#inmed_8r常数表达式的理解和使用** - **问题背景**:在编写ARM汇编代码时,了解#inmed_8r常数表达式的含义及其适用范围是非常重要的。 - **知识点概述**: - **8位位图的理解**:所谓“8位位图”指的是由8位组成的数字(0-255之间),通过对其进行循环移位偶数位产生的数值。这样的数值虽然形式上可能超过255(例如0x3FC),但由于它们可以通过8位数通过循环移位获得,因此依然被认为是合法的。 - **合法常量与非法常量的区别**:合法常量是指那些可以通过8位数循环移位得到的数值,如0x3FC、0xF0000000和0xF0000001;而非法常量则是无法通过这种方式得到的数值,例如0x1FE、0xFFFF和0xF0000010。 - **LDR指令的使用**:对于LDR R0, [R1], #−4这条指令,其含义是先读取R1所指向的内存单元的值并存入R0,然后再将R1减去4。这是一种后索引寻址方式。 **知识点4:程序移植过程中的模式识别** - **问题背景**:在将代码从一个平台移植到另一个平台时,了解当前代码段所处的工作模式对于正确处理异常和中断至关重要。 - **知识点概述**:通过读取当前程序状态寄存器(CPSR)可以获取当前的工作模式。CPSR包含了处理器状态信息,包括当前的工作模式。 **知识点5:保护现场寄存器的选择** - **问题背景**:在调用函数或处理异常时,保护现场是非常重要的步骤之一。 - **知识点概述**:根据ARM Thumb过程调用标准,通常选择保护R0-R3和R12,而不是R4-R11。这是因为R0-R3和R12在函数调用期间被视作“易失性”寄存器,即它们可能会被函数内部使用而不保存其原始值。相反,R4-R11被视为“非易失性”寄存器,在函数调用前后应保持不变。 **知识点6:MOV指令的操作数范围限制** - **问题背景**:在ARM汇编语言中,MOV指令的操作数有一定的范围限制。 - **知识点概述**:MOV指令的操作数为8位位图数,这意味着只能使用那些可以通过8位循环移位得到的数值。如果尝试使用超出范围的数值(如0x00003DD0),编译器会报错。 **知识点7:“用户可见”的理解及寄存器的物理属性** - **问题背景**:ARM架构中提到了“用户可见”的寄存器。 - **知识点概述**:用户可见寄存器是指那些可以直接通过程序访问和修改的寄存器,如R0-R15。每个模式下的特殊寄存器(如R8与R8_fiq)实际上代表了不同的物理寄存器。 **知识点8:不同工作模式下的限制** - **问题背景**:在ARM架构中,不同的工作模式有着不同的限制。 - **知识点概述**: - **USR模式**:用户模式(USR)不能设置CPSR寄存器,也没有SPSR寄存器。在此模式下,代码可以为ARM或Thumb。 - **SVC模式**:监督模式(SVC)通常用于操作系统内核代码的执行。 - **IRQ模式**:中断模式(IRQ)用于处理外部中断。对于外设操作的限制取决于具体的芯片设计。 **知识点9:初始化堆栈时的工作模式决定** - **问题背景**:在初始化堆栈时,如何确定后续的工作模式? - **知识点概述**:初始化堆栈时,可以通过设置CPSR寄存器来确定处理器的工作模式。 **知识点10:文字池的概念** - **问题背景**:在ARM汇编程序设计中,文字池是一种特殊的存储区域。 - **知识点概述**:文字池可以理解为一个常量数组,其中保存的常量可以是普通的数值,也可以是地址。这些常量在程序运行时是不可改变的。 **知识点11:中断向量表的设计** - **问题背景**:在中断向量表中,通常不会直接使用LDR PC, “异常地址”,而是通过定义一个标号并在后面使用DCD来指定异常服务程序的地址。 - **知识点概述**:LDR指令只能跳转到当前PC 4kB范围内的地址,而B指令能跳转到32MB范围。为了实现4GB全范围的跳转,通常会在LDR PC, "xxxx"指令附近定义一个标号,并通过DCD指令指定该标号对应的地址。 以上内容是对《嵌入式ARM经典300问》中部分内容的知识点总结和解释。通过学习这些知识点,可以更好地理解和掌握ARM架构的基本原理和编程技巧。
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助