ARM公司不生产芯片,只设计处理器架构(内核)
一、CISC、RISC两种指令集
CISC(Complex Instruction Set Computer):复杂指令集计算机
芯片面积大、加工成本高、复杂、体积大、功耗大
28效应:80%的情况下只能用到20%
RISC(Reduced Instruction Set Computer):精简指令集计算机
基于28效应将用不上的很多功能删减后构成精简指令集计算机
芯片面积小、加工成本低、功耗低、体积小(便携式设备)
ARM是典型的精简指令集架构
最早处理器架构是以ARM1~ARM11命名的,再后来就是以Cortex系列命名:
A(Application) 应用(手机、应用电子等)
R(Real time) 实时性(汽车电子、航天航空等)
M(Micro) 微控制器(MCU单片机等)
二、ARM内核结构
Cortex-A7 32位
ALU:算术逻辑单元
寄存器组:
|------------|--------------|--------------------------------------------------------|
| 寄存器 | 名称 | 作用 |
| R0~R12寄存器 | 通用寄存器(内核内部) | 存放数据 |
| pc寄存器(R15) | 程序计数器 | 本质是一个指针,指向哪行代码,程序就执行到哪行 三级流水结构: PC取指令 译码器解释 Kernel执行指令 |
| lr寄存器(R14) | 连接寄存器 | 保存函数返回地址 |
| SP寄存器(R13) | 栈指针寄存器 | 用来管理栈区 |
| cpsr寄存器 | 当前程序状态寄存器 | 保存程序运行到某一步的状态 |
| spsr寄存器 | 保存/备份程序状态寄存器 | 当异常发生时,保存/备份cpsr寄存器中程序的状态 |
MMU:内存管理单元
用于管理虚拟内存到物理内存映射,从而提升物理内存利用率
Cache:高速数据缓存(内核内部)
直接从Cache访问数据,提高CPU访问数据的效率
icache:指令缓存,用于指令
dcache:数据缓存,用于数据
在裸机(不跑操作系统)阶段,必须要关闭MMU,打开icache,关闭dcache
必须关 MMU:没有 OS 就没有虚拟地址、页表、映射,开了会直接死机 / 异常
必须开 icache:指令只读、不修改、无一致性问题,开了纯加速
必须关 dcache:数据会被 CPU / 外设修改,裸机无法维护 Cache 一致性,开了会数据错乱、死机
三、总线
单总线通信:通过一根线和外设通信,和一个外设通信时,其他外设接不进来

多总线通信:设备之间有多条独立线路,可以同时传输、互不干扰

AHB总线:先进高速总线(USB、网卡、RAM),连接通信速率快的外设
APB总线:先进外设总线(GPIO、UART),连接通信速率慢的外设

AHB → 北桥的高速互联总线
APB → 南桥的低速外设总线
四、编译器的四个处理步骤
预处理:头文件的展开、宏的替换、条件编译(需要加入编译的代码加入编译,需要从编译中去除的代码去除) .i
编译:将C语言程序编译为汇编语言代码 .s
汇编:将汇编语言代码编译为二进制机器代码 .o
链接:将用户的代码与系统中的库链接成一个可执行文件
在ARM中要用到交叉编译:
交叉编译:在一个平台编写代码,在另一个平台编译
电脑(Ubuntu)是 x86 架构,目标设备(ARM 开发板 / STM32 )是 ARM 架构,两者指令集完全不兼容,不能直接运行对方的程序。 所以必须用专门的编译器把代码翻译成 ARM 能看懂的指令
- 在 Ubuntu(x86) 的 VS Code 里写 C 代码
- 使用 arm-linux-gnueabihf-gcc 这类交叉编译器
- 编译出 ARM 架构的可执行文件
- 放到开发板上运行
五、计算机系统的硬件组成
计算机的五大硬件组成部分:
控制器、运算器、输入设备、输出设备、存储器
三级存储系统:

flash:闪存
Flash(闪存)是一种非易失性存储器,在 ARM 架构的嵌入式系统中,它的核心角色是代码存储 + 数据持久化,断电后数据不会丢失。
nor flash:每一个字节可以被寻址,地址总线和数据总线
nand flash:无法被寻址,以固定块大小写入或读取数据(一次512字节)
eMMC:集成控制器的 Flash,速度更快,接口标准化
与RAM的区别:
| 维度 | Flash(闪存) | RAM(随机存取存储器) |
|---|---|---|
| 易失性 | 非易失(断电留存) | 易失(断电丢失) |
| 读写速度 | 读快、写 / 擦慢 | 读写都极快 |
| 访问方式 | 块 / 扇区操作 | 字节级随机访问 |
| 用途 | 存代码、持久数据 | 运行时变量、堆栈、缓存 |
六、ARM中的指令集
ARM 指令集就是 ARM 处理器能听懂的 "命令语言"。
| 特点 | ARM 指令集 | Thumb 指令集 |
|---|---|---|
| 位数 | 32 位 | 16 位 |
| 代码大小 | 大 | 小(省 Flash) |
| 速度 | 快 | 稍慢但足够用 |
| 常用场景 | 应用处理器 | 单片机 MCU(Cortex-M) |
处理器及其指令集:
|-----------|-----------|-------|
| 处理器内核 | 处理器架构 | 指令集 |
| imx6ull | Cortex-A7 | ARMV7 |
| S3C2440 | ARM920T | ARMV4 |
| exnoy4412 | CortexA8 | ARMV8 |
七、处理器工作模式
|------------|----------|----------------------|
| 模式 | 名称 | 何时处于该模式 |
| User | 非特权用户模式 | 大部分任务执行在这种模式 |
| FIQ | 快速中断请求模式 | 当一个高优先级中断产生时 |
| IRQ | 普通中断请求 | 当一个低优先级中断产生时 |
| Supervisor | 管理模式 | 当复位或软中断指令执行时 |
| Abort | 数据访问中止模式 | 当内存中读取/写入异常失败时 |
| Undef | 未定义指令模式 | 执行了CPU不认识的指令时 |
| System | 有特权系统模式 | 使用和User模式相同寄存器集的特权模式 |
八、寄存器的组织概要

程序状态存储器:

ARM中有37个寄存器
Cortex体系中有40个寄存器
九、异常处理流程

异常向量表:是一个数组,数组中存放异常产生后跳转到对应异常服务函数的指令