嵌入式解谜日志之ARM架构的基础知识
计算机系统是硬件与软件的有机结合硬件系统(物理基础)运算器:执行算术(加减乘除)和逻辑运算(与或非),核心是 ALU(算术逻辑单元)。控制器:指挥硬件协调工作,包含指令寄存器、程序计数器(PC)等,是系统的 “指挥中心”。存储器:存储数据和程序,分内存(RAM/ROM,速度快但容量小)和外存(硬盘 / Flash,容量大但速度慢)。输入设备:将外部信息传入计算机(如键盘、传感器、摄像头)。输出设备
ARM 可以指 Advanced RISC Machines,它是一种处理器架构,ARM 架构是一种精简指令集计算机(RISC)架构。
一,计算机系统与嵌入式处理器体系总结
(1)计算机系统的基本组成
计算机系统是硬件与软件的有机结合,二者缺一不可:
-
硬件系统(物理基础)
由五大核心部件组成,遵循冯・诺依曼体系结构:- 运算器:执行算术(加减乘除)和逻辑运算(与或非),核心是 ALU(算术逻辑单元)。
- 控制器:指挥硬件协调工作,包含指令寄存器、程序计数器(PC)等,是系统的 “指挥中心”。
- 存储器:存储数据和程序,分内存(RAM/ROM,速度快但容量小)和外存(硬盘 / Flash,容量大但速度慢)。
- 输入设备:将外部信息传入计算机(如键盘、传感器、摄像头)。
- 输出设备:将处理结果反馈到外部(如显示器、打印机、电机)。
-
软件系统(功能实现)
- 系统软件:管理硬件和支持应用的基础软件,包括操作系统(如 Windows、Linux)、编译器、驱动程序等。
- 应用软件:为特定需求开发的软件(如办公软件、嵌入式控制程序)。
(2)处理器核心概念与分类
处理器是硬件系统的 “大脑”,按功能和场景分为多种类型:
| 类型 | 全称 | 核心特点与应用场景 |
|---|---|---|
|
CPU (center Processing Unit) |
中央处理单元 | 通用型处理器,集成运算器 + 控制器,负责系统整体调度(如电脑、服务器的 X86/ARM 处理器)。 |
|
GPU (Grapics Processing Unit) |
图形处理单元 | 擅长并行计算,专注图形渲染和大规模数据处理(如显卡、AI 加速)。 |
|
FPU (float Processing Unit) |
浮点处理单元 | 专门处理浮点运算(如科学计算、3D 建模),常集成在 CPU 中。 |
嵌入式领域:
|
MPU (mirco Processing Unit) |
微处理器 | 面向通用计算,需外接内存和外设(如嵌入式 Linux 系统的 ARM Cortex-A 系列)。 |
|
MCU (Mirco Contral Unit) |
微控制器 | 集成 CPU + 内存 + 外设(GPIO、UART 等),适合控制场景(如 STM32、51 单片机)。 |
|
DSP (digital signal Processing) |
数字信号处理器 | 优化高频数学运算,用于音频 / 视频处理、雷达信号分析等(如 TI 的 TMS320 系列)。 |
| SoC(system on chip) | 片上系统 | 集成 MPU/MCU+DSP+GPU + 外设(如 WiFi、蓝牙),一站式解决复杂场景(如手机芯片、智能汽车)。 |
SOC(system on chip):片上系统
是一种集成和设计的理念,像一个蓝图,将市政府(MPU),警察局(MCU),研究所(DSP)和机场(调制解调器),将这些东西放在同一片土地上(芯片),然后就组成了一个功能完善的城市(芯片)
二,内核框架:
1.冯・诺依曼架构
- 存储器:程序指令和数据存放在同一块内存中
- 总线:通常只有一套地址总线和数据总线
- 工作方式:CPU 每次取指令或取数据都要访问同一块内存
- 优点:结构简单、成本低、编程灵活
- 缺点:CPU 同一时刻只能取指令或取数据,有 **“冯・诺依曼瓶颈”**,限制了速度
- 应用:大多数通用计算机(PC、服务器、手机 CPU 等)
2.哈佛架构
- 存储器:程序指令和数据存放在两块独立的内存中
- 总线:有两套独立的总线(指令总线和数据总线)
- 工作方式:可以同时取指令和取数据,并行处理
- 优点:速度快、并行性好,特别适合实时信号处理
- 缺点:结构复杂、成本高、编程相对受限
- 应用:DSP(数字信号处理器)、部分单片机、早期计算机
核心区别总结
| 特性 | 冯・诺依曼架构 | 哈佛架构 |
|---|---|---|
| 存储器 | 统一内存 | 分离内存 |
| 总线 | 一套总线 | 两套总线 |
| 并行性 | 取指 / 取数不能同时进行 | 可同时进行 |
| 适用场景 | 通用计算 | 实时信号处理 |
ARM内核存储结构上偏向哈佛架构的特征
1.缓存分离:多数 ARM 内核采用了分离的指令缓存(I-Cache)和数据缓存(D-Cache)。 以 Cortex-A 系列为例,指令和数据分别存储在不同的缓存中,CPU 可以同时从
- I-Cache 中读取指令,
- 从 D-Cache 中读写数据提高了系统的并行处理能力,类似于哈佛架构中指令和数据分开存储的设计理念。
2.独立总线(部分情况):一些 ARM 内核具备独立的
- 指令总线,
- 数据总线支持同时进行指令读取和数据访问,进一步体现了哈佛架构的特性。
三、处理器架构:CISC 与 RISC
架构决定了处理器的指令集设计和工作方式:
-
CISC(complex instruction set computer)(复杂指令集计算机)
- 特点:指令多(数百条)、功能复杂,支持单指令完成复杂操作(如 X86 架构)。
- 优势:编程直观,适合通用计算机(兼容性强)。
- 劣势:结构复杂、功耗较高。
-
RISC(reduce instruction set computer)(精简指令集计算机)
- 特点:指令少(几十条)、功能简单,通过多条指令组合完成复杂操作(如 ARM、RISC-V 架构)。
- 优势:结构简单、功耗低、执行效率高。
- 劣势:编程需更多指令组合,适合嵌入式设备(手机、单片机)
ARM 属于 RISC 架构,RISC 架构的设计理念使得 ARM 内核在低功耗、低成本和高性能方面具有优势,广泛应用于移动设备、物联网设备等嵌入式领域

ARM 的 Cortex-A、Cortex-R 和 Cortex-M 系列是针对不同应用场景设计的内核,核心区别体现在性能、功能和适用领域上,简要概括如下:
| 系列 | 核心定位 | 性能与功能特点 | 典型应用场景 |
|---|---|---|---|
| Cortex-A | 高性能通用计算(MPU) | 支持复杂操作系统(Linux/Android),带 MMU(内存管理单元),注重多任务和高性能,采用超标量流水线。 | 智能手机、平板、服务器、汽车智能座舱等。 |
| Cortex-R | 实时安全关键型控制(real-time) | 强实时性(低延迟),带 MPU(内存保护单元),支持容错和安全特性,适合高可靠性要求场景。 | 汽车刹车系统、工业控制、医疗设备等。 |
| Cortex-M | 低功耗微控制器(MCU) | 结构精简,低成本低功耗,支持 RTOS(如 FreeRTOS),无 MMU(部分有 MPU),注重易用性和实时控制。 | 物联网传感器、家电控制、嵌入式小设备等 |
ARM 内核主要由以下核心部分构成:
- 指令处理单元:包括取指单元(获取指令)、译码单元(解析指令)。
- 执行单元:以算术逻辑单元(ALU)为核心,负责运算和数据处理,含乘法器等专用电路。
- 寄存器组:通用寄存器(R0-R15)及状态寄存器(CPSR/SPSR),用于快速存储数据和状态。
- 存储管理相关:部分内核含内存管理单元(MMU)和分离的指令 / 数据缓存(I-Cache/D-Cache)。
- 总线接口:连接外部的总线接口单元,负责与外设、内存通信。(地址总线,数据总线,控制总线)
- 中断处理单元:响应和处理中断请求,保障实时性。
3.寄存器组:通用寄存器(R0-R15)及状态寄存器(CPSR/SPSR),用于快速存储数据和状态。
通用寄存器:
- 位于 CPU 核心内部,是处理器的一部分
- 没有内存地址,只能通过 CPU 指令直接访问(如
MOV R0, R1) - 包括 R0-R12 等通用寄存器和 PC(程序计数器)、LR(链接寄存器)等特殊寄存器
- 访问速度最快,与 CPU 主频同步
在 ARM 架构中,通用寄存器和特殊功能寄存器分工明确,其中 R0-R12 是通用寄存器(主要用于数据操作),而 R13-R15 则是具有特殊功能的寄存器(与程序运行流程密切相关)。下面详细解释这些寄存器的作用:
(1)通用寄存器(R0-R12)
通用寄存器主要用于临时存储数据、地址或运算结果,在汇编指令中直接参与数据处理,没有固定功能限制(可自由使用)。
| 寄存器 | 特点与用途 |
|---|---|
| R0-R7 | 低组通用寄存器:所有模式下共用一组,没有备份。 常用于传递函数参数、保存临时变量(如 MOV R0, #10 表示将 10 存入 R0)。 |
| R8-R12 | 高组通用寄存器:在特权模式(如中断模式、管理模式)下有备份寄存器(R8_fiq-R12_fiq 等)。 减少模式切换时的数据保存开销,适合复杂运算或嵌套调用。 |
(2)特殊功能寄存器(R13-R15)
这三个寄存器有固定功能,直接影响程序的执行流程:
1. R13:栈指针(SP,Stack Pointer)
- 作用:指向当前栈的顶部,用于管理函数调用、中断时的现场保护。
- 工作原理:
- 栈是内存中的一块区域,遵循 “先进后出” 原则。
- 函数调用时,通过
PUSH {R0-R3}将寄存器数据压入栈(SP 自动减小); - 函数返回时,通过
POP {R0-R3}将数据从栈中恢复(SP 自动增大)。
- 特点:
- 不同模式下有独立的 SP 备份(如 SP_irq、SP_svc),避免模式切换时栈数据冲突。
- 必须初始化(如程序启动时设置
MOV SP, #0x20000000定义栈的起始地址)。
2. R14:链接寄存器(LR,Link Register)
- 作用:保存函数调用或异常发生时的 “返回地址”,用于执行完成后回到原程序。
- 工作原理:
- 当执行
BL 函数名(带返回的跳转)时,CPU 会自动将下一条指令的地址存入 LR,然后跳转到函数入口; - 函数结束时,通过
MOV PC, LR将 LR 中的地址送回程序计数器(PC),实现返回。
- 当执行
3. R15:程序计数器(PC,Program Counter)
- 作用:始终指向下一条要执行的指令地址,控制程序的执行顺序。
- 工作原理:
- CPU 每执行一条指令,PC 会自动增加(增加的值取决于指令长度,ARM 指令为 4 字节,Thumb 指令为 2 字节);
- 跳转指令(如
B 标签、BL 函数)会直接修改 PC 的值,实现程序流程跳转。
(3)特殊状态寄存器(扩展补充)
除了 R13-R15,ARM 还有一个关键寄存器与程序状态相关:
-
CPSR(Current Program Status Register,当前程序状态寄存器)是 ARM 处理器中最核心的寄存器之一,用于存储当前 CPU 的状态信息,包括模式、中断使能、运算标志等关键信息。它是一个 32 位寄存器,每一位(或位段)都有特定含义
- SPSR(保存程序状态寄存器):
仅在异常模式下存在,用于保存进入异常前的 CPSR 值,退出异常时恢复(MOVS PC, LR会自动恢复 SPSR 到 CPSR)。
总结
- R0-R12:通用数据寄存器,灵活存储运算数据和地址,是汇编编程的 “临时变量”。
- R13(SP):管理栈空间,负责函数调用和异常时的现场保护,是程序运行的 “内存管家”。
- R14(LR):记录返回地址,确保函数或异常处理完成后能回到原流程,是程序的 “导航仪”。
- R15(PC):控制指令执行顺序,是程序流程的 “方向盘”。
这些寄存器协同工作,确保 CPU 能正确执行指令、处理函数调用和异常,是理解 ARM 汇编和底层运行机制的核心。
外设寄存器:
- 属于外部设备(GPIO、UART、ADC 等)的一部分
- 通过 "内存映射" 方式分配了固定的地址(如 GPIO 通常在 0x40020000 附近)
- 必须通过内存访问指令操作(如
LDR R0, [R1]读取地址中的值) - 访问需要通过系统总线,速度比通用寄存器慢
内存映射机制:
ARM 系统将外设寄存器、RAM、Flash 等都映射到同一个地址空间,CPU 通过不同的地址来区分访问的是哪种资源。这就是为什么操作外设寄存器时,看起来像在操作普通内存地址。
通用寄存器和外设寄存器的区别:
| 对比项 | 通用寄存器 | 外设寄存器 |
|---|---|---|
| 位置 | CPU 内部 | 外设内部(内存映射) |
| 访问速度 | 极快(CPU 内部总线) | 较慢(系统总线访问) |
| 用途 | 临时数据 / 地址存储 | 控制外设、读取状态 |
| 数量 | 很少(固定) | 较多(随外设而定) |
| 地址 | 无固定内存地址(CPU 内部) | 有固定内存映射地址 |
| 掉电数据 | 丢失 | 部分有硬件保持(如状态寄存器) |
5.总线接口:连接外部的总线接口单元,负责与外设、内存通信。
- 地址总线:单向传输,用来指定内存或外设的地址,位数决定最大寻址空间。
- 数据总线:双向传输,负责在各部件间传输实际数据,宽度影响传输效率。
- 控制总线:多向传输,传递控制和状态信号,协调各部件有序工作。
字长:数据总线和地址总线的数量
四, ARM 处理器的工作模式
ARM 有 7 个基本工作模式,分别是:
- User(用户模式):非特权模式,大部分常规任务在该模式下执行。
- FIQ(快速中断模式):当高优先级(快速)中断产生时进入,用于快速响应紧急中断。
- IRQ(外部中断模式):低优先级(普通)中断产生时进入,处理一般的外部中断。
- Supervisor(管理模式):复位或软中断指令执行时进入,用于系统管理等操作。
- Abort(数据访问终止模式):存取异常时进入,处理内存访问错误等情况。
- Undef(未定义指令模式):执行未定义指令时进入,对不被识别的指令进行处理。
- System(系统模式):使用与 User 模式相同寄存器集的特权模式,可执行特权操作。
此外,Cortex - A 系列还有特有模式Monitor(监控模式),是为安全扩展的、用于执行安全监控代码的特权。


CPSR 的位结构:

关键位段详解
1. 条件标志位(N、Z、C、V)
这 4 位是 CPSR 中最常用的位,由 ALU 运算自动更新,用于条件跳转、条件执行等逻辑控制:
- 例如:
adds r0, r1, r2中,s后缀表示更新 CPSR 的 N/Z/C/V 位; - 条件跳转指令(如
bne、bcs)会根据这些标志位决定是否执行跳转。
2. 中断禁止位(I、F)
用于全局控制中断响应,是嵌入式开发中控制中断的核心手段:
- 关闭 IRQ 中断:
cpsid i(本质是设置 CPSR 的 I=1); - 开启 IRQ 中断:
cpsie i(本质是设置 CPSR 的 I=0); - FIQ 中断的开关逻辑与 IRQ 类似(通过 F 位),且 FIQ 优先级高于 IRQ,关闭时需同时考虑 I 和 F 位。
3. 指令集状态位(T)
控制 CPU 执行的指令集类型:
- ARM 状态(T=0):执行 32 位 ARM 指令,功能完整;
- Thumb 状态(T=1):执行 16 位 Thumb 指令,代码更紧凑;
- 指令
bx(带状态切换的跳转)会根据目标地址的最低位自动更新 T 位(0→ARM,1→Thumb)。
4. 模式位(M [4:0])
5 位组合定义 CPU 的 7 种工作模式(见下表),决定了 CPU 的权限和可用资源:
| M [4:0](二进制) | 十六进制 | 工作模式 | 特权级 | 说明 |
|---|---|---|---|---|
| 10000 | 0x10 | 用户模式(User) | 非特权 | 普通程序运行,权限最低 |
| 10011 | 0x13 | 超级用户模式(SVC) | 特权 | 复位 / 软件中断时进入,系统服务核心模式 |
| 10010 | 0x12 | 外部中断模式(IRQ) | 特权 | 处理普通外部中断 |
| 10001 | 0x11 | 快速中断模式(FIQ) | 特权 | 处理高速紧急中断 |
| 10111 | 0x1B | 未定义指令模式 | 特权 | 处理未识别的指令 |
| 10110 | 0x1A | 数据访问中止模式 | 特权 | 处理内存数据访问错误 |
| 11111 | 0x1F | 系统模式(System) | 特权 | 操作系统内核运行,共享用户模式寄存器 |
CPSR 的操作指令
- 读取 CPSR:
mrs r0, cpsr(将 CPSR 的值读到 r0,仅特权模式可用); - 修改 CPSR:
msr cpsr, r0(将 r0 的值写入 CPSR,仅特权模式可用); - 快速修改中断位:
cpsid i(关 IRQ)、cpsie i(开 IRQ)等cps指令。
总结
CPSR 是 ARM 处理器的 “状态中枢”,通过以下核心功能支撑 CPU 运行:
- 记录运算状态(N/Z/C/V),支持条件执行;
- 控制中断响应(I/F 位),管理异常处理;
- 切换指令集(T 位),平衡代码效率与兼容性;
- 定义工作模式(M [4:0]),实现权限隔离与资源管理。
模式切换
二、主动切换模式(通过指令修改 CPSR)
在特权模式下(如 SVC、System),可通过指令直接修改 CPSR 的模式位,主动切换到其他模式。常用方法有两种:
1. 使用 cps 指令(简单直接)
cps 是专门用于切换模式的指令,格式:
cps #模式编码 ; 模式编码为上述 M[4:0] 的十六进制值
示例:
cps #0x12 ; 切换到 IRQ 模式(0x12 = 0b10010)
cps #0x1F ; 切换到 System 模式(0x1F = 0b11111)
cps #0x13 ; 切换到 SVC 模式(0x13 = 0b10011)
2. 通过读写 CPSR 寄存器(灵活控制)
先读取 CPSR 到通用寄存器,修改模式位后写回,格式:
mrs r0, cpsr ; 读取 CPSR 到 r0
bic r0, r0, #0x1F ; 清除原有模式位(低 5 位)
orr r0, r0, #模式编码 ; 设置新的模式位
msr cpsr, r0 ; 写回 CPSR,完成模式切换
示例(切换到 IRQ 模式):
mrs r0, cpsr ; 读取当前 CPSR
bic r0, r0, #0x1F ; 清除低 5 位(模式位)
orr r0, r0, #0x12 ; 设置 IRQ 模式(0x12)
msr cpsr, r0 ; 应用修改,切换模式
三、异常触发时自动切换模式
当异常(如中断、复位、未定义指令)发生时,CPU 会自动切换到对应模式,进行处理中断并保存当前状态:
- 复位 → 进入 SVC 模式
- IRQ 中断 → 进入 IRQ 模式
- FIQ 中断 → 进入 FIQ 模式
- 未定义指令 → 进入未定义指令模式
自动切换的同时,CPU 会做两件关键事:
- 将异常发生前的 CPSR 保存到对应模式的 SPSR(备份程序状态寄存器)。
- 将返回地址存入
lr(链接寄存器),便于异常处理后返回。

四、核心用途
- 权限隔离:通过 User 模式(非特权)限制普通程序访问硬件,需通过 SVC 等特权模式实现系统调用。
- 异常处理:每种异常对应专属模式(如 IRQ 模式处理外部中断),确保处理过程与正常程序隔离。
- 资源独立:除 User 和 System 模式共享寄存器外,其他模式有独立的栈指针(sp)和 SPSR,避免冲突。
五、关键注意事项
- 特权限制:仅特权模式可主动切换模式,User 模式(非特权)无此权限。
- 栈初始化:切换到新模式后,需重新设置栈指针(sp),避免栈溢出或冲突。
- 状态恢复:异常处理结束后,需从 SPSR 恢复原 CPSR,并通过 lr 返回原程序(如
bx lr)。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐

所有评论(0)