ARM体系结构学习笔记(一):从硬件基础、寄存器到三级流水线
💡 适合人群:嵌入式新手、秋招备考、底层开发入门学习者
💡 学习目标:从零搭建ARM体系完整知识框架,吃透嵌入式底层核心基础,为RTOS、Linux驱动、单片机高阶开发打牢根基
一、计算机系统与嵌入式基础
1.1 计算机系统基本组成
完整计算机系统分为硬件系统和软件系统两大部分:
-
软件系统:应用层程序(APP)、操作系统(SYS),负责逻辑调度与功能实现
-
硬件系统:由五大核心部件组成——运算器、控制器、存储器、输入设备、输出设备,是程序运行的物理载体
嵌入式系统定义:以应用为核心、计算机技术为基础,软硬件可裁剪的专用计算机系统,具备低功耗、小体积、高稳定性、强环境适应性的特点,广泛应用于各类专用控制场景。
1.2 主流处理器分类
不同处理器各司其职,适配不同运算场景,嵌入式开发中高频接触的处理器类型如下:
-
CPU(中央处理单元):通用型核心处理器,擅长复杂逻辑运算、任务调度,是设备的主控核心
-
GPU(图形处理单元):专为图形图像渲染、并行图像处理设计
-
FPU(浮点运算单元):专门负责高精度浮点数运算,弥补CPU浮点计算短板
-
NPU(神经网络处理器):面向AI算法、神经网络运算,常用于智能设备算力加速
1.3 嵌入式核心专业概念
入门嵌入式必须分清以下核心器件概念,是底层开发的基础认知:
-
MPU(微处理器):偏向高性能数据处理,通用型架构,常用于跑系统的高端嵌入式设备
-
MCU(微控制器):高集成度控制型芯片,集成外设、存储、运算单元,主打工业控制、轻量化场景,日常所说单片机即属于MCU范畴
-
DSP(数字信号处理器):针对高强度数学运算、信号滤波、音视频解码优化,专用性极强
-
SoC(片上系统):高度集成化芯片方案,将CPU、GPU、DSP、各类外设(GPIO、UART、PWM等)全部集成在单颗芯片中,是目前智能设备的主流架构
1.4 存储器核心区别:RAM vs ROM
存储器是程序与数据的载体,RAM、ROM是嵌入式最基础的两类存储介质,核心差异如下:
|
特性 |
RAM(随机访问存储器) |
ROM(只读存储器) |
|---|---|---|
|
寻址能力 |
可被处理器直接寻址读写 |
一般无法被处理器直接寻址 |
|
掉电特性 |
易失性,断电数据全部丢失 |
非易失性,断电数据永久保存 |
|
读写速度 |
读写速率极高,适配实时运算 |
读写速度较慢,适合固化程序 |
|
硬件成本 |
单位存储成本高 |
单位存储成本低 |
二、处理器架构与指令集
2.1 主流硬件架构
市面上主流处理器架构包含:X86、ARM、MIPS、RISC-V,其中ARM架构垄断嵌入式、移动端设备市场。
2.2 两大指令集体系
-
CISC复杂指令集:代表架构X86,指令数量多、功能复杂,单条指令可完成复杂操作,主要用于电脑、服务器
-
RISC精简指令集:代表架构ARM、RISC-V,指令精简、执行效率高、功耗低,适配嵌入式、移动端设备
2.3 ARM版本与内核分类
-
指令集版本:迭代V1~V9,嵌入式开发常用V4、V5、V7、V9版本
-
内核分类
-
Cortex-A:应用级内核(MPU),支持跑Linux、安卓系统,主打高性能
-
Cortex-R:实时性内核,用于工业控制、汽车电子等高实时场景
-
Cortex-M:单片机内核(MCU),轻量化、低功耗,是入门嵌入式主流内核
-
💡 行业二八定律:80%的程序业务逻辑,仅依赖20%的核心指令,精简指令集的优势在此体现得淋漓尽致。
三、ARM内核结构与寄存器详解
本文基于32位ARM内核讲解,机器字长为4字节,内核核心组成如下:
3.1 ARM内核核心模块
-
ALU算术逻辑单元:负责所有加减乘除、逻辑运算
-
Cache高速缓存:分为I-Cache(指令缓存)、D-Cache(数据缓存),加速指令和数据读取
-
MMU内存管理单元:实现虚拟内存与物理内存的地址映射,可根据需求关闭
-
CPSR当前程序状态寄存器:记录程序运行状态、运算标志位
-
SPSR备份程序状态寄存器:用于异常场景下备份CPSR状态,方便恢复现场
3.2 通用寄存器(R0~R15)
ARM32核心共有16个通用寄存器,各司其职,是程序运行的核心载体:
-
R0~R12:通用数据寄存器,自由存储运算数据、函数参数
-
R13(SP):栈顶指针寄存器,始终指向当前栈帧顶部地址,管理栈空间
-
R14(LR):链接寄存器,自动保存函数调用的返回地址,用于函数执行完毕后跳转回原代码位置
-
R15(PC):程序计数器,指向即将执行的下一条指令地址,控制程序执行流程
四、总线结构与虚拟内存布局
4.1 三大总线架构
总线是内核与外设、内存数据交互的通道,32位ARM总线配置如下:
-
数据总线(32位):单次可传输4字节数据,决定数据传输带宽
-
地址总线(32位):寻址范围 0x00000000 ~ 0xFFFFFFFF,最大寻址空间4GB
-
控制总线:传输读写、中断、复位等控制信号,协调硬件工作
4.2 虚拟内存空间布局(低地址→高地址)
ARM系统内存分区清晰,各区域功能固定,是理解变量、函数存储的关键:
-
代码区(Code):存储编译后的程序指令,只读不可修改
-
静态区(Static):分为已初始化、未初始化数据区,存储全局变量、静态变量,程序运行全程有效
-
堆区(Heap):由低地址向高地址增长,通过malloc/new手动申请、释放,用于动态内存分配
-
栈区(Stack):由高地址向低地址增长,自动管理,存储局部变量、函数参数、栈帧数据
-
内核区:位于最高地址段,保护系统内核程序与数据,用户程序无法直接访问
五、函数调用与栈帧机制(核心难点)
栈帧是函数调用的核心机制,每调用一个函数,就会在栈上开辟一块独立栈帧,函数执行结束后自动销毁。
栈结构遵循栈底在下、栈顶在上的规则,函数调用栈帧压栈顺序:main栈帧 → fun0栈帧 → fun1栈帧(当前执行栈帧,位于栈顶)。
程序执行到fun1内部时的寄存器状态:
-
SP(R13):指向当前fun1栈帧顶部地址
-
LR(R14):保存main函数调用fun0后的下一条指令地址,用于函数返回
-
PC(R15):指向当前正在执行的fun1指令地址
六、GCC编译流程与CPU三级流水线
6.1 GCC编译四步完整流程
C语言源码到可执行文件,需经过预处理、编译、汇编、链接四步:
# 1.预处理:宏展开、头文件替换、注释清除 gcc -E main.c -o main.i # 2.编译:C代码转为汇编代码 gcc -S main.i -o main.s # 3.汇编:汇编代码转为机器码目标文件 gcc -c main.s -o main.o # 4.链接:整合所有目标文件、库文件,生成可执行程序 gcc main.o -o main.out
6.2 CPU三级流水线原理
流水线技术是提升CPU执行效率的核心,将指令执行拆分为三个阶段,多指令并行处理:
-
取指(Fetch):从内存中读取待执行指令
-
译码(Decode):解析指令功能、操作数,确定执行逻辑
-
执行(Execute):通过ALU完成运算,将结果写回寄存器/内存
优势:单时钟周期可并行处理多条指令的不同阶段,大幅提升CPU运行效率。
七、嵌入式常用总线协议
ARM芯片通过不同总线适配高速、低速设备,两大核心总线:
-
AHB高性能总线:适配高速设备,如内存、DMA、核心控制器,传输速率高
-
APB外设总线:适配低速外设,如GPIO、UART、PWM、定时器,结构简单、功耗低
📌 全文总结
本篇笔记从计算机基础、嵌入式概念入手,层层递进讲解了ARM架构指令集、内核寄存器、总线结构、虚拟内存、栈帧机制、编译流程与流水线技术,覆盖了嵌入式底层开发的核心基础知识点。
以上内容是后续学习RTOS实时操作系统、Linux驱动开发、嵌入式性能优化的必备前置知识,吃透底层原理,才能突破高阶开发瓶颈。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)