ARM | 内核架构、寄存器组、工作模式

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个寄存器

九、异常处理流程

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

相关推荐
AI+程序员在路上2 小时前
嵌入式软件技术大全
linux·开发语言·arm开发·单片机
黄昏晓x6 小时前
Linux----网络
linux·网络·arm开发
莎士比亚的文学花园6 小时前
硬件(4)——ARM体系架构
arm开发
平凡的阳阳8 小时前
OpenClaw 2026.3.23 重大更新:千里通 Arm 架构 Linux 小主机完配“小龙虾”,开启轻量级 AI 新纪元
linux·arm开发·openclaw·小龙虾
senijusene9 小时前
ARM 架构知识解析:从基础概念,到指令集,再到异常处理
arm开发·架构
孤影过客9 小时前
Flutter优雅构建:从零打造开发级工作流
arm开发·数据库·flutter
青桔柠薯片10 小时前
ARM 体系架构基础学习笔记
arm开发·学习·架构
Hello World . .13 小时前
ARM体系架构
arm开发
somi71 天前
ARM-03-点亮led
arm开发