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

九、异常处理流程

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

相关推荐
XMAIPC_Robot17 小时前
ARM+FPGA+AI船舶/工业自动化控制器EMC测试等级解析(IEC60533/IEC60945)
arm开发·人工智能·fpga开发·zynq·arm+fpga·rk3588+fpga
奔跑的架构师1 天前
[A-51]ARMv9/v8-SCMI系统架构
linux·arm开发·架构·系统架构·arm
玄芯散人1 天前
【元婴·94】ARM vs RISC-V大战
arm开发·risc-v
szxinmai主板定制专家2 天前
ZYNQ PL+PS 架构拆解|工业自动化与电力物联网高速数据采集、预处理与协议上云
arm开发·人工智能·物联网·fpga开发·数据采集卡·rk3576
szxinmai主板定制专家2 天前
告别 ARM 实时性短板:基于 ZYNQ 的电力故障录波 + 工业振动数据采集系统设计
arm开发·人工智能·fpga开发·zynq·数据采集卡·arm+fpga·rk3588+fpga
Awh-2 天前
ARM 裸机开发 DAY11 学习笔记
arm开发·笔记·学习
陌上花开缓缓归以2 天前
openssl 模拟签名验签(加密解密)详细分析
arm开发
en.en..2 天前
ARM 汇编 B / BL 核心区别
汇编·arm开发
程序员JerrySUN3 天前
Jetson Edge AI 实战05:Secure Boot 到底在保护什么?PKC、SBK、Fuse 与可信启动链一次讲清【视频讲解】
arm开发·人工智能·安全·计算机视觉·目标跟踪·音视频
老当益壮梁奶奶3 天前
驱动学习(二):从零开始:驱动工程搭建与字符设备驱动框架详解(基于IMX6ULL)
c语言·arm开发·驱动开发·嵌入式硬件·学习