嵌入式学习 day49:ARM基础

一、ARM架构概述

ARM(Advanced RISC Machine)是一种精简指令集(RISC) 架构。和51单片机相比,主要有几个区别:

对比项 51单片机 ARM
位数 8位 32位
指令集 CISC风格 RISC精简指令集
寄存器数量 少 多(通用寄存器+状态寄存器)
工作模式 单一 多种模式
异常处理 简单 规范的异常向量表

ARM主要用于手机、平板、嵌入式设备,是当前最主流的嵌入式架构之一。

二、Cortex-A寄存器

ARM的寄存器分为通用寄存器 和状态寄存器两大类。

2.1 通用寄存器

Cortex-A内核有 R0 ~ R15 共16个通用寄存器,其中几个有特殊用途:

寄存器 别名 作用
R0 ~ R12 --- 通用数据寄存器,随便用
R13 SP Stack Pointer,栈指针,指向当前栈顶
R14 LR Link Register,链接寄存器,保存函数返回地址
R15 PC Program Counter,程序计数器,存下一条指令地址

R0 ~ R12 是普通工作寄存器,存数据、传参数都可以。

R13(SP) 管栈,压栈弹栈都靠它。

R14(LR) 管返回地址,函数执行完靠它跳回去。

R15(PC) 管下一条指令,程序"往下走"靠它。

2.2 状态寄存器

ARM有两个状态寄存器,容易混淆:

寄存器 全称 作用
CPSR Current Program Status Register 当前程序状态
SPSR Saved Program Status Register 保存的程序状态

CPSR 保存当前程序的状态,包括:

  • 条件标志位:N(负)、Z(零)、C(进位)、V(溢出)

  • 中断屏蔽位:I(IRQ禁止)、F(FIQ禁止)

  • 运行模式位:当前处于哪种模式

  • 指令集状态:ARM状态 / Thumb状态

SPSR 只在异常模式下才存在。当异常发生时,CPU 自动把异常前的 CPSR 存进 SPSR;异常处理完,再从 SPSR 恢复回 CPSR。

三、ARM工作模式

ARM有多种工作模式,不同模式权限不同、能访问的寄存器也不同。

模式 名称 用途
User 用户模式 普通程序运行模式,权限最低
FIQ 快速中断模式 处理高速中断,优先级最高
IRQ 普通中断模式 处理普通中断
Supervisor 管理模式 系统复位、软中断后进入
Abort 中止模式 存取异常时进入
Undefined 未定义模式 执行未定义指令时进入
System 系统模式 特权模式,和User共用寄存器

前6种叫异常模式 ,普通程序运行在 User模式,出了事情(中断、异常)就切到对应的异常模式。

四、异常模式与异常向量表

4.1 什么是异常

异常是打断正常程序执行的事件,包括:中断(IRQ/FIQ)、软中断(SWI)、复位、取指/取数出错、未定义指令等。

发生异常时:

  1. 把当前 CPSR 保存到 SPSR

  2. 切换到对应的异常模式

  3. 跳到异常向量表中对应的入口地址

  4. 处理完异常,恢复 CPSR,返回原程序

4.2 异常向量表

异常向量表是一张固定的地址表,每个异常对应一个入口:

地址 异常
0x00 复位
0x04 未定义指令
0x08 软中断(SWI)
0x0C 取指中止
0x10 取数中止
0x14 保留
0x18 IRQ中断
0x1C FIQ中断

CPU遇到异常时,自动跳到对应地址去执行处理代码。

五、指令集与数据类型

5.1 数据类型

ARM支持以下基本数据类型:

类型 位数 说明
字节 8位 Byte
半字 16位 Halfword
字 32位 Word

5.2 指令集

ARM有几种指令集状态:

指令集 说明
ARM指令集 32位指令,功能全,效率高
Thumb指令集 16位指令,代码密度高,省空间
Thumb-2 16/32位混合,兼顾性能和空间

ARM和Thumb可以切换,通过 CPSR 中的 T 位控制。

六、封装模式(大小端)

ARM支持大端 和小端两种存储模式:

模式 低地址存什么 举例 0x12345678
小端 低位字节 78 56 34 12
大端 高位字节 12 34 56 78

ARM默认是小端模式,可以通过配置切换。

七、今日总结

今天学了ARM基础,核心要点如下:

  1. Cortex-A寄存器:R0~R12通用,R13=SP(栈指针),R14=LR(返回地址),R15=PC(下一条指令)

  2. 状态寄存器:CPSR是当前状态,SPSR是异常现场存档

  3. 工作模式:User(用户)+ 6种异常模式(FIQ、IRQ、Supervisor、Abort、Undefined、System)

  4. 异常向量表:每种异常对应固定入口地址,异常发生自动跳转

  5. 数据类型:字节(8位)、半字(16位)、字(32位)

  6. 指令集:ARM(32位)、Thumb(16位)、Thumb-2(混合)

  7. 大小端:ARM默认小端,可配置为大端

相关推荐
极客 - L U21 分钟前
卡尔曼滤波从零到精通
c语言·数据结构·单片机·嵌入式硬件·mcu
SteveSenna39 分钟前
aubo学习:realsense手眼标定
学习·机器人·视觉检测
码小文2 小时前
CAM350使用笔记(6)---Gerber文件铺铜间距检查
嵌入式硬件·cam350软件·cam350使用笔记
Li_RuiQi2 小时前
DAgger与交互式模仿学习_ACT学习笔记
笔记·学习
Canmag 兴隆磁性2 小时前
回复磁导率 μ_R:永磁体在动态磁路中的关键参数
开发语言·学习·r语言·永磁材料·充磁·磁导率
lengxuenong3 小时前
区间覆盖问题 · 简明学习手册1
java·学习·算法
悟道书生3 小时前
若依 RBAC 权限控制学习笔记
java·网络·笔记·sql·学习·vue
Yiran_G4 小时前
双频 Wi-Fi 6 + 蓝牙 5.4:无声讯通 WS8712 模组的开发与集成要点
网络·嵌入式硬件·物联网·智能家居
Be for thing4 小时前
PyTorch自动求导Autograd详解|requires_grad、backward、grad、梯度清零
pytorch·学习·1024程序员节
小嘉丶学长4 小时前
Day08 · 字符串(二)
服务器·开发语言·python·学习·1024程序员节