学习ARM

最近在系统学习嵌入式底层,之前写单片机代码,一直停留在"调用库函数点灯、串口打印"的层面。代码能跑,但一旦遇到中断卡死、程序跑飞这类问题,完全无从下手。直到开始啃ARM Core的基础架构,才恍然大悟:中断本质就是ARM的异常,而异常会自动切换处理器工作模式。

这篇笔记就结合课堂所学,梳理ARM内核、7种工作模式、异常处理完整流程,帮大家打通嵌入式底层最重要的一环。

一、什么是ARM Core?

很多初学者容易混淆ARM Core和SOC芯片。

ARM Core,也就是ARM内核,是基于RISC精简指令集的CPU核心电路,是芯片里面负责取指、运算、执行指令、处理异常的主体。

它内部包含:寄存器组、ALU算术逻辑单元、桶形移位器、硬件乘法器、指令流水线、异常控制硬件。

划重点:ARM内核本身不带外设。像STM32这类SOC芯片,是厂商拿到ARM Core之后,外挂RAM、ROM、定时器、串口等外设,封装成完整芯片。

ARM内核一共有37个32位寄存器。除了通用寄存器R0~R15,还有CPSR(当前程序状态寄存器)和SPSR(备份程序状态寄存器)。

不同工作模式下会启用影子寄存器,最典型就是R13(SP栈指针)、R14(LR链接寄存器)和SPSR,用来在发生异常时保存现场。

二、ARM的7种基础工作模式

ARM处理器有7个基础工作模式,分为特权模式和非特权模式,其中5种属于异常模式,由异常事件触发。

模式 名称 触发条件

User 用户模式 非特权模式,普通应用程序运行,不由异常触发

FIQ 快速中断模式 高优先级快速中断触发

IRQ 普通中断模式 常规外部中断触发

Supervisor(SVC) 管理模式 复位、软中断SWI触发,操作系统内核常用

Abort 中止模式 内存访问出错(预取中止、数据中止)触发

Undef 未定义指令模式 CPU读到无法识别的指令时触发

System 系统模式 特权模式,寄存器和User完全一致,手动修改CPSR进入,不由异常触发

简单理解:

• User模式权限最低,不能直接修改底层寄存器,用来跑普通业务代码;

• FIQ、IRQ就是我们常说的中断模式;

• 一旦发生异常,硬件会自动切换到对应的异常模式,使用该模式专属的影子寄存器,避免破坏用户程序现场。

补充:Cortex-A系列还有Monitor模式,是TrustZone安全扩展引入的,用于安全监控。

三、ARM异常处理完整流程

异常就是打断当前程序正常执行的事件,复位、中断、非法指令都属于异常。ARM有一张异常向量表,每个异常对应固定偏移地址:

0x00 Reset,0x04 Undefined Instruction,0x08 Software Interrupt,0x0C Prefetch Abort,0x10 Data Abort,0x18 IRQ,0x1C FIQ。

✅ 异常产生:硬件自动完成这几步

  1. 把当前CPSR拷贝保存到SPSR_<当前异常模式>,备份程序状态;

  2. 修改CPSR:强制进入ARM指令状态,切换为对应的异常模式,屏蔽对应中断;

  3. 将异常返回地址保存到LR_<异常模式>;

  4. PC跳转到异常向量表对应的偏移地址,开始执行异常服务函数。

✅ 异常返回:软件指令完成恢复

  1. 从SPSR_恢复CPSR,把处理器状态、模式、中断屏蔽位恢复成异常之前;

  2. 从LR_恢复PC,回到原来的代码继续运行。

    重要笔记:异常返回操作,只能在ARM状态下执行。

    四、学习感悟

以前写中断程序,只知道开中断、写中断服务函数。学完ARM异常机制才明白:我们写的中断服务函数,只是整个异常流程的后半段。保存现场、切换模式、跳转向量,全部由ARM内核硬件自动完成。

底层原理不是纸上谈兵。看懂这部分,以后遇到中断嵌套、程序死机、内存访问错误,就不再只会盲目调试,可以从模式切换、现场保存、向量表这几个方向排查问题。嵌入式开发,底层知识永远是上限。

小结

  1. ARM Core是处理器内核,负责指令执行、运算与异常处理;

  2. ARM有7种工作模式,异常发生时硬件自动切换到对应异常模式;

  3. 异常处理分为硬件自动保存现场,以及软件恢复现场两个阶段。

    。

相关推荐
Bug收容所21 分钟前
学习LangChain day1
学习·langchain·llm·agent
传奇开心果编程22 分钟前
【现代声明式UI学与练】第7课 组件通信——父传子、子传父、跨层级通信、状态提升与 Context
学习·flutter·react native·ui·swiftui·android jetpack
我命由我123452 小时前
Photoshop - Photoshop 矢量蒙版
学习·职场和发展·产品运营·求职招聘·职场发展·产品经理·photoshop
熊猫钓鱼>_>3 小时前
越顺,越空:当 AI 把学习 “优化“ 到消失
人工智能·学习·ai·llm·agent·ai编程·metaai
一条破秋裤3 小时前
02_注册设备号_从主次设备号到成对注销
学习
@codercjw3 小时前
企业实战电机和传感器选型
学习
zhangrelay4 小时前
用ROS2Lyrical实验报告册思路重做蓝桥云课ROS1实验并改进
linux·笔记·学习·ubuntu·机器人
m4Rk_5 小时前
【论文阅读】Agent 记忆机制(91):THEANINE——不删除过时记忆,让 Agent 记住事情是如何变化的
论文阅读·人工智能·学习·开源·github
我命由我123455 小时前
Photoshop - Photoshop 面板和菜单
学习·职场和发展·产品运营·求职招聘·职场发展·产品经理·photoshop
一木 之林5 小时前
RAG开发学习总结:从 LangChain 入门到检索增强生成链路的全栈实战-4/6
人工智能·学习·计算机视觉·langchain