嵌入式学习——ARM1
【嵌入式ARM入门】ARM体系结构学习总结(附重点&易错点)
今天系统学习ARM体系结构基础,从嵌入式概念、处理器分类、SOC、ARM内核寄存器、内存映射、流水线、总线等知识点梳理,适合嵌入式入门复盘。
📖 一、基础概念
1. 嵌入式系统定义
嵌入式:以应用为中心,以计算机技术为基础,软硬件可裁剪的专用计算机系统。
设计考量:功耗、体积、环境适应性、稳定性、可靠性。
嵌入式系统三层架构:
- 应用层 APP
- 操作系统 SYS
- 硬件系统
计算机系统两大组成:硬件系统 + 软件系统(应用软件、系统软件)
计算机硬件五大核心部件:运算器、控制器、存储器、输入设备、输出设备。
2. 各类处理器单元介绍
| 缩写 | 全称 | 简要说明 |
|---|---|---|
| CPU | 中央处理单元 | 通用处理器,负责核心运算与控制 |
| GPU | 图形处理单元 | 图形图像运算 |
| FPU | 浮点运算单元 | 专门处理浮点数计算 |
| NPU | 神经网络处理器 | AI算法运算 |
| MPU | 微处理器 | 通用型,偏向处理 |
| MCU | 微控制器 | 集成度高,偏向控制(单片机) |
| DSP | 数字信号处理器 | 高强度数学运算专用芯片 |
| SOC | 片上系统 | 在单芯片集成MPU/MCU/DSP、外设等整套系统 |
SOC理解比喻:把处理器、外设模块像城市基础设施,全部集成在同一块芯片上,形成完整系统。
3. 存储器分类 RAM / ROM
- RAM 随机访问存储器
- 处理器可直接寻址
- 单位空间成本高
- 易失性存储器,断电丢失数据
- 读写速率高
- ROM 只读存储器
- 一般不可直接被处理器寻址
- 单位空间成本低
- 非易失性,断电数据保留
- 读写速率低
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字节数据。
核心部件:
- 通用寄存器 R0~R15
- R13(sp):栈顶指针寄存器
- R14(lr):链接寄存器,保存函数返回地址
- R15(pc):程序计数器,保存当前取指地址
- ALU:算术逻辑单元,负责运算
- Cache高速缓存:iCache指令缓存、dCache数据缓存,提升CPU访问速度
- MMU 内存管理单元:虚拟内存 ↔ 物理内存地址转换;关闭MMU则直接操作物理内存
- 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
四阶段:预处理 → 编译 → 汇编 → 链接
✅ 学习重点
- 区分 MPU / MCU / DSP / SOC 的定位,SOC是片上集成整套系统的理念。
- RAM与ROM核心区别:易失性 vs 非易失,访问特性差异。
- RISC精简指令集(ARM)与CISC复杂指令集(X86)的区别。
- ARM寄存器R13(sp)、R14(lr)、R15(pc)作用,面试高频。
- MMU功能:虚拟内存和物理内存转换;只有带MMU的Cortex-A才能跑Linux。
- 栈帧原理:函数调用时栈的变化,sp/lr/pc配合工作。
- 三级流水线原理,流水线用来提升指令执行效率。
- 程序编译四个完整阶段,嵌入式开发编译流程基础。
⚠️ 易错点 & 踩坑点
- ❌ 误区:SOC是一种芯片。✅ 纠正:SOC是集成设计理念,把处理器、外设全部集成在单芯片。
- ❌ 混淆RAM/ROM:RAM断电丢失,ROM断电保留;RAM读写速度更快。
- ❌ 分不清寄存器:pc是程序计数器,保存取指地址;lr存函数返回地址;sp永远指向栈顶,不是栈底。
- ❌ 栈增长方向:ARM栈是高地址向低地址增长,容易和PC栈方向记混。
- ❌ MMU作用:MMU不是必选,Cortex-M没有MMU,不能跑完整Linux,只能裸机/RTOS。
- ❌ 流水线不是同时执行多条指令全部完成,而是不同阶段并行,不是同时执行完。
- ❌ 编译阶段混淆:
-E预处理、-S生成汇编,-c只汇编不链接,很多新手容易搞错gcc参数。 - ❌ 总线概念:地址总线用来寻址,数据总线传输数据,控制总线传输控制信号,不要混淆。
📝 学习小结
今天学习ARM体系底层基础,从嵌入式概念、处理器分类、存储、ARM内核寄存器、内存映射、栈帧、流水线到程序编译流程。这是嵌入式Linux开发最底层基础,理解寄存器、内存、MMU、栈帧,对后续裸机、驱动开发至关重要。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)