新手自学嵌入式 | 学习日记:ARM架构初探与基础概念梳理

一、RISC 与 CISC 指令集

CISC 复杂指令集计算机

指令功能丰富,硬件芯片设计复杂,成本高、体积大、功耗高,代表:x86 PC 处理器。

RISC 精简指令集计算机(ARM 属于 RISC 架构)

RISC:Reduced Instruction Set Computer

  • 指令功能少,硬件电路简单
  • 成本低、体积小、功耗低

ARM 公司只设计 CPU 架构,不生产芯片,把架构授权给半导体厂商(ST、NXP、三星等)生产实际芯片。

二、ARM 内核分类(Cortex 系列)

ARMv7、ARMv8 为汇编指令集版本;Cortex 是内核系列:

  1. Cortex‑A:Application 应用处理器 面向复杂操作系统,跑 Linux、安卓
  • A5、A7(IMX6ULL、STM32MP157)、A8、A9、A725(玄戒 O1)
  1. Cortex‑R:Real‑Time 实时内核 汽车电子、工业实时控制,强实时性
  2. Cortex‑M:MCU 单片机内核 单片机领域,裸机开发
  • M3:STM32F103;M4:STM32F407、STM32MP157

STM32F103:ST 意法半导体生产,内核是 ARM Cortex‑M3

冯・诺依曼架构

指令和数据共用同一块存储器空间,Cortex‑A7 属于 32 位冯诺依曼架构。

三、ARM 内核寄存器

Cortex‑A7 内核寄存器基础

表格

寄存器 别名 作用说明
R0‑R11 通用寄存器 用来临时存放运算数据
R12 IP 内部暂存寄存器
R13 SP Stack Pointer 栈指针;栈规则:先进后出,后进先出;出栈:从 sp 指向位置取数据,sp++
R14 LR Link Register 链接寄存器,保存函数返回地址
R15 PC Program Counter 程序计数器,存指令地址;指向下一条要执行的指令

💡注意:Cortex‑A7 总共有40 个寄存器 ;物理通用寄存器一共 16 个(R0~R15);不同工作模式下会切换备份寄存器。

状态寄存器

  1. CPSR:当前程序状态寄存器,保存当前 CPU 运行状态、条件标志位、处理器工作模式。
  2. SPSR:备份程序状态寄存器;发生异常时,备份保存 CPSR 现场,异常处理完毕后用来恢复 CPSR。

ALU 算术逻辑单元

负责完成 CPU 的加减、逻辑与或非移位等运算。

四、MMU & CACHE

MMU 内存管理单元

MMU:Memory Management Unit

  • 功能:把程序的虚拟地址转换为物理地址,依靠页表完成地址映射。
  • 裸机开发:关闭 MMU,直接操作物理地址
  • Linux 驱动开发:打开 MMU,使用虚拟地址,每个进程拥有独立 4GB 虚拟地址空间。

CACHE 高速缓存

CACHE 是 CPU 和内存之间的高速小容量存储器。

  • 速度:CPU > Cache > 内存 DDR
  • 作用:缓解 CPU 和 DDR 内存之间速度差距,把频繁访问的数据 / 指令缓存到高速 Cache,减少访问低速内存次数,提升 CPU 运行效率。

五、冯・诺依曼架构 和 哈佛架构

  1. 冯・诺依曼架构 指令、数据存放在同一个存储器,共用一套地址 / 数据总线。取指令和读写数据不能完全并行。代表:Cortex‑A7。
  2. 哈佛架构 指令存储器、数据存储器相互独立,分开两套总线。取指令和读写数据可以同时进行,效率高。代表:Cortex‑M 系列单片机。

六、大小端存储模式

针对多字节数据在内存的存放规则:

  1. 大端模式:低地址存高字节,高地址存低字节(网络协议常用)
  2. 小端模式:低地址存低字节,高地址存高字节(ARM CPU 默认小端)

示例:int i = 0xFFFFFFFF; i +=1;,发生无符号溢出,结果为 0。

七、ARM 三种移位指令

  1. LSR 逻辑右移 :无符号数移位,右移,高位补 01011 0010 LSR #1 → 0101 1001
  2. ASR 算术右移 :有符号数移位,高位补符号位1011 0010 ASR #1 → 1101 1001
  3. ROR 循环右移 :最低位移出,补到最高位1011 0010 ROR #1 → 0101 1001

八、总线、存储器件、交叉编译

总线

  • 单总线:内核外设共用一组信号线,速度慢
  • 多总线:AHB 先进高速总线,给高速外设使用

Flash 存储

  1. Nor Flash :拥有地址、数据总线,可以按单个字节寻址,可以直接运行程序。
  2. Nand Flash:块设备,以 512 字节为块读写,不能直接执行代码。

RAM:易失存储器,断电数据丢失;Flash 非易失,断电保存数据。

交叉编译

在 PC(x86 平台)编写编译程序,编译出可以在 ARM 平台运行的二进制程序。PC 叫宿主机,ARM 叫目标板。

九、中断向量表 & 异常向量表 & 异常处理流程

  1. 中断向量表 :数组,数组里面存放中断服务函数入口地址。
  2. 异常向量表:数组,存放跳转到异常服务函数的汇编指令。

向量表基地址可以设置为 0x00000000 或者 0xFFFF0000,不同芯片有差异。 异常类型:Reset 复位、未定义指令、软中断、预取中止、数据中止、IRQ 普通中断、FIQ 快速中断。

ARM 异常处理完整流程

  1. 发生异常,CPU 硬件自动保存现场:把 CPSR 复制到对应模式 SPSR,将返回地址存入该模式下 LR;
  2. CPU 硬件自动切换处理器工作模式,跳转到异常向量表对应的入口地址;
  3. 执行异常向量表内跳转指令,进入异常服务函数;
  4. 在异常服务函数内部做业务处理;
  5. 异常返回:从 SPSR 恢复 CPSR,从 LR 修正后恢复 PC,回到被打断的程序继续执行。

十、ARM 处理器工作模式

Cortex‑A7(ARMv7)一共有7 种处理器工作模式

  • 用户模式 (User):普通应用程序运行模式
  • 系统模式 (System):特权模式,和 User 共用寄存器
  • 快中断模式 (FIQ):处理快速中断
  • 中断模式 (IRQ):普通外设中断
  • 管理模式 (SVC):复位、系统调用进入,操作系统内核常用模式
  • 中止模式 (Abort):内存访问出错(数据 / 预取异常)进入
  • 未定义模式 (Undef):遇到未识别指令进入

除 User 用户模式是非特权模式,其余 6 种均为特权模式,可以访问全部硬件资源。

📚重点问题

  • ARM 处理器工作模式有几种?
  • 答:Cortex‑A7 (ARMv7) 共 7 种工作模式:User、System、FIQ、IRQ、SVC、Abort、Undef;1 种非特权 (User),6 种特权模式。
  • Cortex‑A7 内核有多少个寄存器?
  • 答:物理寄存器总数 40 个;不同模式会切换分组寄存器。
  • Cortex‑A7 内核有多少个通用寄存器?PC、LR、SP 通用寄存器作用?
  • 答:基础通用寄存器 16 个 R0~R15;PC (R15):程序计数器,保存下一条将要执行指令的地址;LR (R14) 链接寄存器:保存函数调用返回地址,异常模式下保存异常返回地址;SP (R13) 栈指针:指向当前栈顶,管理栈空间,栈遵循先进后出。
  • CPSR 寄存器和 SPSR 寄存器作用?
  • 答:CPSR:当前程序状态寄存器,保存当前 CPU 的条件标志位、中断使能位、处理器工作模式;所有模式共用。SPSR:备份程序状态寄存器,每种异常特权模式拥有一份;发生异常时备份 CPSR,异常返回时恢复 CPSR。User 用户模式没有 SPSR。
  • 什么是 MMU?
  • 答:内存管理单元,完成虚拟地址→物理地址转换,借助页表;裸机关闭 MMU 直接访问物理地址;Linux 操作系统打开 MMU,实现进程独立虚拟地址空间、内存保护。
  • 什么是 CACHE?
  • 答:高速缓存,位于 CPU 和 DDR 内存之间高速存储部件,解决 CPU 运算速度远大于内存读写速度的矛盾;缓存常用指令和数据,减少访问低速内存次数,提升整体性能。
  • 冯・诺依曼架构和哈佛架构的区别?
  • 答:冯诺依曼:指令与数据共用同一套存储器与总线;取指令和读写数据不能并行;Cortex‑A7 使用该架构。哈佛架构:指令存储器、数据存储器相互独立,两套独立总线;取指令和读写数据可以同时执行;Cortex‑M 单片机使用。
  • 异常处理流程?
  • 答:①硬件自动保存现场:CPSR→SPSR,异常返回地址存入对应模式 LR; ②硬件自动切换 CPU 特权工作模式; ③跳转到异常向量表对应条目; ④跳转执行异常服务函数,处理业务; ⑤异常返回:SPSR 恢复 CPSR,LR 修正后赋值给 PC,回到原程序继续运行。
  • IMX6ULL 芯片所搭载的内核版本?
  • 答:NXP IMX6ULL 搭载 Cortex‑A7 内核。
  • Cortex‑A7 使用的汇编指令集版本?
  • 答:ARMv7‑A 指令集版本。
  • nor flash 和 nand flash 区别?
  • 答:Nor Flash:具备地址、数据总线,可以字节寻址,支持片上执行 (XIP);容量一般偏小,成本高。Nand Flash:块设备,以块(512 字节)单位读写,不能直接运行代码;容量大、成本低;需要驱动完成读写。

📝学习小结

  1. ARM 是 RISC 精简指令集架构,只做架构授权,不造芯片。
  2. PC、LR、SP、CPSR/SPSR 是 ARM 汇编最核心,要分清各自用途;7 种处理器模式为面试高频。
  3. MMU 区分裸机(关)和 Linux(开)开发场景;Cache 解决 CPU 与内存速度不匹配。
  4. 移位指令要分清逻辑右移、算术右移、循环右移,考试、面试高频考点。
  5. 异常向量表是裸机中断启动的基础,Reset 复位向量是上电第一条执行代码入口。
  6. Cortex‑A7 内核:40 个物理寄存器,指令集 ARMv7‑A;IMX6ULL 使用 Cortex‑A7。

后续计划:ARM 汇编基础、裸机点灯实验,C 语言和汇编混合编程。

相关推荐
SKH.1 小时前
ARM-lcd屏幕点亮
arm开发
hsfxuebao1 小时前
Harness工程
后端·架构
鬓戈1 小时前
开源中文输入法技术调研与自建方案
学习·开源
55873生态系统手记1 小时前
读完 55873 资产钱包的技术栈,我重新理解了 "合规钱包" 应该长什么样
算法·架构
ting94520002 小时前
深度拆解|Dif.Sh 开源特性开关(Feature Flags)技术架构与工程落地全解析
人工智能·架构·开源
only-lucky2 小时前
QML深入学习七(MVC模块)
学习·mvc
Token架构师2 小时前
给 Claude Code 套一层「进程外」策略:OpenShell 落地与审计日志分析
人工智能·安全·架构
ESDWAN2 小时前
企业组网后网络频繁掉线,常见故障排查指南
运维·网络·架构
邵奈一2 小时前
当沉香之乡遇上 Seed-2.1-pro:我用 AI 给村子做了一个数字门面
算法·架构