这里写自定义目录标题
- ARM嵌入式系统核心知识点
- 一、整体硬件架构
- 二、存储系统:RAM vs ROM vs Flash
- 1. RAM(随机存储器)
- 2. ROM(只读存储器)
- 3. Flash(闪存)
- 4. 存储速度金字塔
- 三、CPU 核心寄存器详解
- 四、内存结构
- 冯诺依曼结构(Von Neumann)
- 哈佛结构(Harvard)
- 现实中的折中:改进型哈佛
- 五、栈(Stack)相关知识
- 1. 栈的类型
- 2. 流水线(Pipeline)
- 六、两个关键硬件单元(提升 ARM 运行效率 / 实现地址管理,是中高端 ARM 的核心组件)
- 1. Cache(缓存)
- 2. MMU(内存管理单元)
- 总结
- SoC 与嵌入式系统核心知识点
- 一、核心概念速查
- 二、SoC 总线架构(图里最核心的部分)
- 1. 总线分层
- 2. 总线的三种类型
- 三、ARM 处理器系列分类
- 四、指令集架构:RISC vs CISC
- **ARM工作模式的总结:**
- 异常处理:
ARM嵌入式系统核心知识点
PC 只存“下一条指令的地址”,LR 只存“当前函数的返回地址”。
如果一个函数里面又调用了别的函数,LR 就会被新的返回地址覆盖,原来的返回地址会丢。
栈就是用来“保存旧 LR”,防止丢失栈:先进后出
SP栈指针,指向当前栈的栈顶位置
Cache 是介于 CPU 与内存之间的高速缓冲,用来存放“最近/常用”数据与指令,减少 CPU 等待内存的时间,从而提升性能。
(但并不是所有 MCU 都有 Cache)
一、整体硬件架构
这是一个典型的ARM 嵌入式系统硬件组成:
- 核心:ARM 处理器(CPU)
- 供电与时钟:
- 电源:给整个系统供电
- 晶振(时钟):提供稳定的工作频率,决定 CPU 运算速度
- 复位:让系统回到初始状态
- 存储设备:
- 内存 (RAM):临时数据存储,掉电丢失
- Flash (ROM):永久数据存储,掉电不丢失
- 外设:输入 / 输出设备(比如按键、LED、串口等)
ARM 最小系统:ARM 微处理器芯片 + 电源 + 时钟 + 复位 + 存储器(+调试 / 编程接口)
二、存储系统:RAM vs ROM vs Flash
1. RAM(随机存储器)
- 特点:访问速度快,但掉电数据丢失
- 分类:
- SRAM:静态 RAM,速度最快,常用于 CPU 缓存(Cache)
- DRAM:动态 RAM,需要刷新,容量更大
- SDRAM:同步动态 RAM,与时钟同步,效率更高
- DDR 内存:双倍速率 SDRAM,现在电脑 / 手机主流内存
2. ROM(只读存储器)
- 特点:掉电数据不丢失,早期只能读,现在可擦写
- 分类:
- PROM:可编程 ROM,只能写一次
- EPROM:可擦除可编程 ROM,紫外线擦除
- EEPROM:电可擦除可编程 ROM,用电擦除,更方便
3. Flash(闪存)
- 结合了 RAM 和 ROM 的优点:访问速度快 + 掉电数据不丢失
- 是现在嵌入式设备(比如单片机、手机)的主要存储介质
4. 存储速度金字塔
速度 / 价格从高到低:
寄存器 > Cache > RAM > ROM/Flash- 寄存器:CPU 内部,最快、最贵,容量最小
- Cache:CPU 和内存之间的缓存,速度介于两者之间
- RAM:内存,临时存数据
- ROM/Flash:永久存程序和数据
三、CPU 核心寄存器详解
寄存器是 ARM 中访问速度最快的存储,直接和 CPU 交互,笔记里的寄存器是 ARM 最核心的通用 / 专用寄存器,各自有固定且唯一的作用,无特殊情况不能混用,按功能分两类:
通用寄存器:R0~R12
- 作用:专门存储普通数据(比如程序运行中的变量、计算中间值)
- 特点:无固定用途,程序员可自由使用,是 ARM 编程中最常用的寄存器。
ARM CPU 内部有一组寄存器,用来临时存数据和控制程序执行:
| 寄存器 | 英文全称 | 功能通俗解释 |
|---|---|---|
| R0~R12 | 通用寄存器 | 用来存临时数据,比如计算时的变量 |
| PC | Program Counter | 程序计数器,永远指向下一条要执行的指令地址,自动 + 4(ARM 指令长度 4 字节) |
| LR | Link Register | 链接寄存器,存函数调用的返回地址,函数执行完后跳回这里 |
| SP | Stack Pointer | 栈指针,指向当前栈的栈顶位置 |
| CPSR | Current Program Status Register | 当前程序状态寄存器,控制进位、溢出、中断、工作模式、大小端等 |
| SPSR | Saved Program Status Register | 保存 CPSR 的备份,用于异常 / 中断恢复 |
| ALU | Arithmetic Logic Unit | 运算单元,真正做加减乘除、逻辑运算的硬件电路 |
| Cache | 缓存 | 分 D-Cache(数据缓存)和 I-Cache(指令缓存),把常用数据 / 指令提前从内存读到 CPU 里,加速访问 |
| MMU | Memory Management Unit | 内存管理单元,把虚拟地址映射成物理地址,实现内存保护和虚拟内存 |
| 协处理器 | - | 辅助 CPU 完成特定功能(比如浮点运算) |
四、内存结构
冯诺依曼结构(Von Neumann)
特点:
- 指令和数据共用一套存储器与总线
- 取指和取数不能同时进行
优点:
- 硬件结构简单、成本低
- 编程和内存管理方便(统一地址空间)
- 适合通用计算
缺点:
- 存在“冯诺依曼瓶颈”(总线争用)
- 吞吐量受限,难以并行取指/取数
哈佛结构(Harvard)
特点:
- 指令和数据分开存储、分开总线
- 可同时取指和取数
优点:
- 吞吐高,性能好
- 更适合高速/实时处理(DSP、MCU 常见)
缺点:
- 硬件复杂、成本高
- 编程/内存管理相对麻烦(地址空间分离)
现实中的折中:改进型哈佛
- 指令/数据分离的 Cache
- 但主存地址空间常统一
- 兼顾性能与易用性
五、栈(Stack)相关知识
栈是一种先进后出的内存结构,用来存函数调用、局部变量等。
1. 栈的类型
增栈:栈顶向高地址增长
减栈:栈顶向低地址增长(ARM 默认是减栈)
空栈:SP 指向最后一个入栈的元素
满栈:SP 指向下一个可入栈的位置
满减栈:ARM 最常用的栈类型,SP 指向栈顶元素,向低地址增长
满减栈:ARM 最常用类型,结合两维:✅满栈:SP 指向当前栈顶元素
✅减栈:入栈时 SP 向低地址移动
2. 流水线(Pipeline)
ARM CPU 用流水线提高执行效率,把一条指令拆成 3 步:
- 取指:从内存拿指令
- 解码:解析指令要做什么
- 执行:真正运算 / 读写数据
- 流水线让 CPU 可以同时处理多条指令,不用等上一条完全做完再开始下一条,大大提升速度
六、两个关键硬件单元(提升 ARM 运行效率 / 实现地址管理,是中高端 ARM 的核心组件)
1. Cache(缓存)
- 位置:访问速率介于寄存器和内存(RAM)之间
- 作用:CPU 访问内存的速度远慢于寄存器,Cache 会把 CPU频繁访问的数据 / 指令临时存起来,CPU 下次直接从 Cache 读取,不用再访问内存,大幅提高程序执行效率(相当于 CPU 和内存之间的「高速中转站」)。
2. MMU(内存管理单元)
- 核心作用:实现虚拟地址到物理地址的映射
- 通俗理解:程序运行时使用的是「虚拟地址」(程序员看到的地址),而芯片实际的内存是「物理地址」(硬件真实的地址),MMU 负责把虚拟地址转换成物理地址,让程序不用关心硬件的真实内存布局,同时还能实现内存分区、权限管理、内存扩容等功能,是操作系统运行的核心硬件基础。
总结
- 存储速度 / 成本排序:寄存器 > Cache > RAM > ROM / 闪存;掉电不丢数据的是:ROM、闪存
- ARM 主流架构:哈佛结构(数据 / 指令分开存,速度快)
- ARM 主流栈类型:满减栈(满栈 + 减栈)
- 专用寄存器核心考点:PC 指向下下条指令、LR 存函数返回地址、SP 指向栈顶、SPSR 是 CPSR 的备份
- Cache 提效率、MMU 做虚拟 / 物理地址映射
整个系统就是:电源 + 时钟让 ARM 跑起来,CPU 用寄存器和 Cache 快速算数据,RAM 存临时数据,Flash 存永久程序,外设和外界交互;程序靠 PC/LR 跳转,用栈存函数调用,靠流水线跑更快。
SoC 与嵌入式系统核心知识点
一、核心概念速查
| 名词 | 全称 / 通俗解释 | 核心特点 |
|---|---|---|
| CPU | 中央处理单元 | 整个系统的 “大脑”,负责运算和控制 |
| SoC | 片上系统(System on Chip) | 把 CPU、总线、外设、存储控制器等都集成在一块芯片上,就是你图里的整个蓝色方块 |
| MCU | 微控制器(Microcontroller) | 俗称 “单片机”,把 CPU、内存、外设都打包在一起,适合控制类场景(比如家电、玩具) |
| MPU | 微处理器(Microprocessor) | 只包含 CPU 核心,需要外接内存、外设才能工作(比如电脑的 CPU) |
| DSP | 数字信号处理器 | 擅长做音频 / 视频、信号滤波等数学运算,处理速度比普通 CPU 快 |
| FPGA | 现场可编程门阵列 | 硬件级可编程芯片,可以自定义电路结构,灵活性极高 |
| 多核异构 | 一个芯片里放多种不同架构的核心 | 比如手机里既有 ARM 大核(负责性能),又有小核(负责省电),还有 DSP/NPU(负责 AI) |
二、SoC 总线架构(图里最核心的部分)
图里展示了典型的AMBA 总线架构,是 ARM 芯片的标准总线设计:
1. 总线分层
- AHB(高速总线):
- 连接高速设备:CPU、存储控制器(管内存 / Flash)、LCD 控制器(管屏幕)
- 特点:速度快、带宽高,适合需要大量数据传输的模块
- APB(外设总线):
- 连接低速外设:GPIO(通用 IO 口)、UART(串口)、ADC(模数转换)、定时器
- 特点:速度慢、结构简单,适合不需要高速传输的外设
- 总线桥:图里 AHB 和 APB 之间有连接,实现高速和低速设备之间的数据交互
2. 总线的三种类型
任何总线都由这三类线组成:
- 地址总线:单向传输,告诉设备 “我要和谁通信”(指定设备地址)
- 数据总线:双向传输,真正传递要读写的数据
- 控制总线:传递控制信号(比如 “读 / 写”、“忙 / 就绪”),协调设备之间的操作
三、ARM 处理器系列分类
ARM 是目前嵌入式领域最主流的处理器架构,按应用场景分三大系列:
| 系列 | 定位 | 典型应用 |
|---|---|---|
| Cortex-A | 高性能、低功耗 | 手机、平板、智能音箱等消费电子(需要跑系统、玩 APP) |
| Cortex-R | 强实时性 | 汽车电子、工业控制(要求指令在固定时间内完成,不能延迟) |
| Cortex-M | 高能效、偏控制 | 单片机、物联网设备、传感器(比如智能灯、手环,主打控制和低功耗) |
四、指令集架构:RISC vs CISC
这是 CPU 设计的两种核心思路,ARM 属于前者:
- RISC(精简指令集):
- 指令数量少、格式统一、每条指令执行时间短
- 硬件设计简单、功耗低、执行效率高
- 代表:ARM、RISC-V、MIPS
- CISC(复杂指令集):
- 指令数量多、功能强大,一条指令能做很多事
- 硬件设计复杂,但编程更方便
- 代表:x86(电脑 CPU)
ARM 体系架构下总共有9 种工作模式(7 种基本模式 + 2 种 Cortex-A 架构特有扩展模式)。
User(用户模式)是唯一的非特权模式,权限最低。系统正常运行时,绝大多数应用程序(APP、普通任务)都在这里执行
特权模式(共 8 个)所有特权模式都能访问系统所有资源(外设、内存、系统配置),核心用于处理异常、系统初始化、安全监控。
再细分为两类:
- 异常模式(6 个):触发特定异常 / 中断时,CPU 自动切换进入。
- Cortex-A 特有特权模式(2 个):Cortex-A 架构(消费电子级,如手机)为安全扩展的模式。
ARM工作模式的总结:
- 模式数量总结(9 种)
- 非特权模式:1 个(User)
- 特权模式:8 个(6 个基本异常模式 + 2 个 Cortex-A 特有模式)
- 中断模式优先级
FIQ(快中断) > IRQ(普通中断)
- FIQ 优先级更高,可打断 IRQ;
- IRQ 不能打断 FIQ,只能等 FIQ 处理完。
- 异常触发的通用规则
任何异常 / 中断发生,CPU 都会自动切换到对应的特权模式(不会停留在 User 模式),这是 ARM 的核心机制!
- 复位→SVC;高优中断→FIQ;低优中断→IRQ;非法指令→Undef;内存错误→Abort;
- System 模式的特殊性
- 它是特权模式,但不对应任何异常,只能手动切换;
- 寄存器和 User 完全共享,这是它和其他特权模式最大的区别(其他特权模式都有独立寄存器)。
- Monitor 模式的专属场景
只有 Cortex-A 架构(手机、智能设备)才有,传统单片机(Cortex-M)、实时控制设备(Cortex-R)一般不支持,记 “手机 / 消费电子专属安全模式”。
这张图讲的是ARM 程序状态寄存器(CPSR)的内部结构。CPSR 是 ARM 核心寄存器中最重要的一个,它控制着 CPU 的运行状态、运算结果标志和中断权限。
E 位 (Endianness) - 大小端控制位
- 功能:决定 CPU 存储数据的字节顺序。
- E=0:小端模式(Little-endian)——低字节存低地址(ARM 芯片默认,如 STM32)。
- E=1:大端模式(Big-endian)——高字节存低地址(网络协议、部分单片机常用)。
在用户模式(User)下,无法通过直接修改 Mode 位跳转到其他模式,只能是条件达到才能跳转。
异常处理:
在 ARM 中,异常(Exception)就是系统的 “紧急事件”。当异常发生时,CPU 必须立刻停止当前正在做的事,转去处理这个事件。
常见的异常类型(右边表格里都有):
- Reset(复位):开机 / 重启(最高优先级)。
- Undefined Instruction(未定义指令):CPU 看不懂你写的指令。
- Software Interrupt(软中断 / SWI):程序主动请求系统服务。
- Prefetch Abort(预取中止):取指令时内存出错(比如指令区非法)。
- Data Abort(数据中止):读 / 写数据时内存出错(比如数组越界)。
- IRQ(外部中断):外设请求(比如按键、串口收到数据)。
- FIQ(快速中断):高优先级外设请求(比如高速数据传输)。
当异常发生时,CPU 会像 “交警” 一样,立刻自动执行一系列操作,不需要我们写代码干预,这是硬件级的自动响应:
步骤 1:备份现场 —— 拷贝 CPSR 到 SPSR
- 操作:
CPSR -> SPSR_<mode> - 大白话:把当前的 “工作状态”(比如运算结果标志位 N/Z/C/V、中断是否禁止、当前模式)备份到对应异常模式的SPSR寄存器里。
- 例子:如果是 IRQ 异常,就把 CPSR 备份到SPSR_IRQ中。
- 为什么:等下处理完异常要回到原来的工作,不备份就回不去了!
步骤 2:强制进入 ARM 状态
- 操作:修改 CPSR 的T 位为
0。 - 大白话:强制 CPU 切换到ARM 指令集状态执行异常处理函数。
- 笔记重点:
异常处理一定只能执行 ARM 指令(因为 Thumb 指令是 16 位,不够存复杂的跳转和保护现场逻辑)。
步骤 3:切换工作模式
- 操作:修改 CPSR 的M [4:0] 位,进入对应的特权模式。
- 大白话:从普通的 User 模式,切到有权限的系统模式(比如 IRQ -> IRQ 模式,SVC -> SVC 模式)。
- 例子:进入 IRQ 异常时,CPU 自动把模式改成IRQ 工作模式。
步骤 4:禁止对应中断(防止干扰)
操作:设置 CPSR 的I 位 / F 位为
1。大白话:
- IRQ 异常:置位I=1,禁止普通中断,防止被更低优先级的中断打断。
- FIQ 异常:置位F=1,禁止快速中断。
目的:保证当前这个紧急异常能被处理完,不被其他中断插队。
步骤 5:保存返回地址 —— 设置 LR
操作:把返回地址保存到LR_(链接寄存器)。
大白话:
- 异常发生时,PC 指向下一条要执行的指令。
- CPU 把这个 “下一条指令的地址” 保存到 LR 里。
- 例子:进入 IRQ 时,保存地址到LR_IRQ。
关键:等异常处理完,我们要从 LR 里拿回这个地址,回到原来的地方继续执行!
步骤 6:跳转到异常处理入口 —— 设置 PC
- 操作:PC = 异常向量地址。
- 大白话:CPU 强制 PC 跳转到一个固定的地址(向量表),那里写着 “异常处理函数” 的入口。
- 例子:进入 IRQ 时,PC 被强制赋值为
0x00000018(对应右边表格的偏移量)。
异常处理完了,CPU 要回到原来的工作状态,这时候要做2 个反向操作:
- 恢复工作状态:从 SPSR 恢复 CPSR
- 操作:
SPSR_<mode> -> CPSR - 大白话:把步骤 1 备份在 SPSR 里的 “现场”,还原回 CPSR。
- 效果:CPU 恢复到原来的模式(User)、原来的中断禁止状态、原来的运算标志。
- 恢复程序执行:从 LR 恢复 PC
- 操作:
LR_<mode> -> PC - 大白话:把 LR 里保存的 “返回地址” 赋值给 PC。
- 效果:CPU 回到异常发生前的下一条指令,继续干活。
⚠️ 关键笔记
Note: 这些操作(恢复 CPSR 和 PC)只能在 ARM 态执行。
异常发生时:
备份 CPSR 到 SPSR -> 切 ARM 态 -> 切特权模式 -> 禁对应中断 -> 存地址到 LR -> 跳向量表 -> 处理异常
异常返回时:
恢复 CPSR 从 SPSR -> 恢复 PC 从 LR
原回 CPSR。
- 效果:CPU 恢复到原来的模式(User)、原来的中断禁止状态、原来的运算标志。
- 恢复程序执行:从 LR 恢复 PC
- 操作:
LR_<mode> -> PC - 大白话:把 LR 里保存的 “返回地址” 赋值给 PC。
- 效果:CPU 回到异常发生前的下一条指令,继续干活。
⚠️ 关键笔记
Note: 这些操作(恢复 CPSR 和 PC)只能在 ARM 态执行。
异常发生时:
备份 CPSR 到 SPSR -> 切 ARM 态 -> 切特权模式 -> 禁对应中断 -> 存地址到 LR -> 跳向量表 -> 处理异常
异常返回时:
恢复 CPSR 从 SPSR -> 恢复 PC 从 LR