【嵌入式ARM入门】ARM体系结构学习总结(附重点&易错点)

今天系统学习ARM体系结构基础,从嵌入式概念、处理器分类、SOC、ARM内核寄存器、内存映射、流水线、总线等知识点梳理,适合嵌入式入门复盘。

📖 一、基础概念

1. 嵌入式系统定义

嵌入式:以应用为中心,以计算机技术为基础,软硬件可裁剪的专用计算机系统
设计考量:功耗、体积、环境适应性、稳定性、可靠性。

嵌入式系统三层架构:

  1. 应用层 APP
  2. 操作系统 SYS
  3. 硬件系统

计算机系统两大组成:硬件系统 + 软件系统(应用软件、系统软件)
计算机硬件五大核心部件:运算器、控制器、存储器、输入设备、输出设备。

2. 各类处理器单元介绍

缩写全称简要说明
CPU中央处理单元通用处理器,负责核心运算与控制
GPU图形处理单元图形图像运算
FPU浮点运算单元专门处理浮点数计算
NPU神经网络处理器AI算法运算
MPU微处理器通用型,偏向处理
MCU微控制器集成度高,偏向控制(单片机)
DSP数字信号处理器高强度数学运算专用芯片
SOC片上系统在单芯片集成MPU/MCU/DSP、外设等整套系统

SOC理解比喻:把处理器、外设模块像城市基础设施,全部集成在同一块芯片上,形成完整系统。

3. 存储器分类 RAM / ROM

  • RAM 随机访问存储器
    1. 处理器可直接寻址
    2. 单位空间成本高
    3. 易失性存储器,断电丢失数据
    4. 读写速率高
  • ROM 只读存储器
    1. 一般不可直接被处理器寻址
    2. 单位空间成本低
    3. 非易失性,断电数据保留
    4. 读写速率低

4. 指令集架构

  • CISC:复杂指令集(X86架构)
  • RISC:精简指令集(ARM架构)

主流架构:X86、ARM、MIPS、RISC-V

ARM内核版本:ARMv1~v9;内核型号:Cortex‑A(应用处理器)、Cortex‑R(实时)、Cortex‑M(MCU单片机)

Cortex-A:跑Linux;Cortex-R:实时控制;Cortex-M:单片机裸机开发

🧠 二、ARM内核核心硬件

1. 32位ARM内核结构

机器字长32bit,一次处理4字节数据。
核心部件:

  1. 通用寄存器 R0~R15
    • R13(sp):栈顶指针寄存器
    • R14(lr):链接寄存器,保存函数返回地址
    • R15(pc):程序计数器,保存当前取指地址
  2. ALU:算术逻辑单元,负责运算
  3. Cache高速缓存:iCache指令缓存、dCache数据缓存,提升CPU访问速度
  4. MMU 内存管理单元:虚拟内存 ↔ 物理内存地址转换;关闭MMU则直接操作物理内存
  5. CPSR 当前程序状态寄存器、SPSR 备份程序状态寄存器:保存程序运行状态、标志位

2. 内存空间映射

  • 物理内存:硬件真实地址
  • 虚拟内存:MMU转换后的地址,操作系统使用
  • 内存分区(RAM虚拟地址空间):代码段、静态区、已初始化、未初始化、堆、栈
  • 外设寄存器组(GPIO/PWM/UART/timer)映射到地址空间,通过总线访问

总线类型:

  • AHB:高速先进高性能总线(内核、高速外设)
  • APB:外设总线(低速外设)
    总线分为3类:地址总线、数据总线、控制总线(图中示例32位地址总线、32位数据总线)

3. 函数栈帧(栈桢)

  • SP(R13)指向栈顶,栈由高地址向低地址增长
  • 每次函数调用,会在栈上开辟一块空间叫栈帧,存放局部变量、函数返回地址
  • LR(R14)保存调用函数返回地址;PC(R15)指向下一条要执行指令

示例:main调用fun1,fun1调用fun0,每层函数都会创建独立栈帧,函数return后栈帧销毁。

4. ARM三级流水线

流水线目的:提高CPU指令吞吐率,并行处理多条指令
三级流水线阶段:预取 → 译码 → 执行
多条指令重叠执行,同一时刻不同指令处在不同阶段。

⚙️ 三、C编译四阶段(ARM开发常用)

# 预处理
gcc -E main.c -o main.i
# 编译(生成汇编)
gcc -S main.i -o main.s
# 汇编(生成目标文件)
gcc -c main.s -o main.o
# 链接(生成可执行程序)
gcc main.o -o main.out

四阶段:预处理 → 编译 → 汇编 → 链接

✅ 学习重点

  1. 区分 MPU / MCU / DSP / SOC 的定位,SOC是片上集成整套系统的理念。
  2. RAM与ROM核心区别:易失性 vs 非易失,访问特性差异。
  3. RISC精简指令集(ARM)与CISC复杂指令集(X86)的区别。
  4. ARM寄存器R13(sp)、R14(lr)、R15(pc)作用,面试高频。
  5. MMU功能:虚拟内存和物理内存转换;只有带MMU的Cortex-A才能跑Linux。
  6. 栈帧原理:函数调用时栈的变化,sp/lr/pc配合工作。
  7. 三级流水线原理,流水线用来提升指令执行效率。
  8. 程序编译四个完整阶段,嵌入式开发编译流程基础。

⚠️ 易错点 & 踩坑点

  1. ❌ 误区:SOC是一种芯片。✅ 纠正:SOC是集成设计理念,把处理器、外设全部集成在单芯片。
  2. ❌ 混淆RAM/ROM:RAM断电丢失,ROM断电保留;RAM读写速度更快。
  3. ❌ 分不清寄存器:pc是程序计数器,保存取指地址;lr存函数返回地址;sp永远指向栈顶,不是栈底。
  4. ❌ 栈增长方向:ARM栈是高地址向低地址增长,容易和PC栈方向记混。
  5. ❌ MMU作用:MMU不是必选,Cortex-M没有MMU,不能跑完整Linux,只能裸机/RTOS。
  6. ❌ 流水线不是同时执行多条指令全部完成,而是不同阶段并行,不是同时执行完。
  7. ❌ 编译阶段混淆:-E预处理、-S生成汇编,-c只汇编不链接,很多新手容易搞错gcc参数。
  8. ❌ 总线概念:地址总线用来寻址,数据总线传输数据,控制总线传输控制信号,不要混淆。

📝 学习小结

今天学习ARM体系底层基础,从嵌入式概念、处理器分类、存储、ARM内核寄存器、内存映射、栈帧、流水线到程序编译流程。这是嵌入式Linux开发最底层基础,理解寄存器、内存、MMU、栈帧,对后续裸机、驱动开发至关重要。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐