ARM-知识扫盲1
什么是ARM
ARM 是一种精简指令集(RISC)处理器架构,采用 RISC 精简指令思想,拥有 ARM 状态与 Thumb/Thumb‑2 两种指令执行状态;ARM 内核内部包含通用寄存器、ALU、CPSR/SPSR、流水线,部分内核集成 MMU、Cache、FPU 等部件。ARM 内核本身不包含存储器与片内外设,芯片厂商将 ARM 内核搭配 RAM、Flash、各类片内外设集成构成 SoC 片上系统。ARM 架构功耗低、体积小,广泛应用于单片机、手机、嵌入式设备等场景,Cortex‑M 系列单片机内核仅支持 Thumb‑2 指令集,没有 MMU,Cortex‑A 系列应用内核带有 MMU,可以运行 Linux 操作系统。
ARM指令集版本与内核版本
ARM 架构版本号(ARMv4T、ARMv7‑M、ARMv8‑A)定义 ARM 指令集,内核型号(Cortex‑M3、Cortex‑A53)是基于对应架构版本实现的具体 CPU 内核。同一个架构版本可以对应多款不同内核,不同内核会支持不同指令集
ARM 架构指的是 ARM 指令集体系版本(ARMv4T、ARMv7‑M 等),它定义了指令、寄存器、异常处理等规范,属于软件层面的标准;内核是基于该架构规范实现的具体 CPU 硬件实物。同一个架构版本可以衍生出多款不同内核,不同内核硬件特性存在差异,但指令集保持兼容。

ARM内核:通用寄存器,CPSR,SPSR,ALU,Cache高速缓存。
通用寄存器(R0~R12)主要用来临时存放运算数据,函数参数,局部变量,地址,指针。CPU执行运算时,数据要先读到寄存器,ALU才可以运算
R13 SP (Stack Pointer)堆栈指针,指向堆栈栈顶地址,每个处理器模式都拥有独立的SP(System公用User)
R14 LR (Link Register)链接寄存器,保存子程序返回地址,跳转函数时,自动将返回地址写入LR,函数返回时,将LR写入PC(32位,LR自动加4)
R15 PC (Program Counter)程序计数器,保存下一步运行的指令地址。
ALU (Arithmetic Logic Unit): 专门完成CPU所有的算术运算和逻辑运算。
MMU (Memory Management Unit): MMU 是内存管理单元,完成虚拟地址到物理地址转换,进行内存访问权限管理。
Cache高速缓存:
I Cache 指令高速缓存 Instruction Cache,存放程序指令,CPU 取指令的时候,优先从I Cache 读取。
D Cache 数据高速缓存 Data Cache,存放程序用到的数据(变量)。读写变量优先访问 D‑Cache(裸机可以先关闭)。

软中断:?
存取异常:存取指令异常与存取数据异常,错误地址,没有数据
未定义指令:指令错误
为了上操作系统进行的准备工作
寄存器集:

每一个模式下,都有一套通用寄存器。有的模式会与USER共用一些寄存器
单核只有一个PC,所以pc独立只有一个,永远指向下一条要执行的程序地址
SP:栈顶指针
cpsr: 当前状态寄存器,所有模式都有
spsr:备份寄存器,切换模式前,将USER的cpsr备份到spsr方便切回进行恢复
一种异常,一种事件,对应一种模式,处理完后需要返回USER(类型中断)
System模式使用寄存器与USER一样,只是有特权

Cortex-A,有40个,多一个monitor监控模式,hyp调试模式
异常向量表

每个位置存储的指令,为一个跳转指令,改变pc,跳到其他地方处理异常,类似中断函数,每个大小为4位
ARM状态?thumb状态?
ARM 内核有 ARM 状态和 Thumb 状态,ARM 状态下执行 32 位 ARM 指令,指令占 4 字节,指令功能完整;Thumb 状态执行 16 位 Thumb 指令,属于 ARM 指令的子集,指令占 2 字节,可以提高代码密度,减小程序占用存储空间。两种状态通过 BX 指令进行切换,依靠目标地址的 bit0 位来选择工作状态,bit0 为 0 进入 ARM 状态,bit0 为 1 进入 Thumb 状态。注意状态不等同于处理器工作模式,Cortex‑M 内核没有 ARM 状态,仅支持 Thumb‑2 混合指令集。
ARM / 通用 PC 访问不可寻址外存(硬盘、U 盘、Flash 盘)流程
可寻址存储:内存 SDRAM,CPU 可以直接通过地址总线读写;
不可寻址外存:硬盘、U 盘、SD 卡。CPU不能直接给外存发地址读取数据,必须通过外设控制器交互,数据先搬运到内存,CPU 再处理内存里的数据。
- 应用程序发起读外存请求(例如读取文件),调用操作系统文件系统接口。
- 操作系统陷入内核态,文件系统把文件逻辑位置,翻译成外存设备上的块号。
- 操作系统在主内存 (RAM) 开辟一块缓冲区。
- CPU 向存储控制器(SATA 控制器 / USB 控制器 / SD 控制器)下发命令:读取指定块,目标内存缓冲区地址。
- 控制器接管 DMA,不需要 CPU 干预,把外存的数据搬运到内存缓冲区。
- DMA 传输完成后控制器产生中断通知 CPU。
- CPU 从内存缓冲区中读取数据,交给应用程序使用。
不可寻址外存(硬盘、U 盘、SD 卡)CPU 内核不能直接访问,必须依靠对应的片内外设控制器:比如 USB 控制器、SD 控制器、SATA 控制器,这些属于片内外设,不属于 ARM 内核 Core 本身。
SOC与CPU的关系
CPU(处理器内核)是 SoC 的其中一个核心组成部分;SoC 是一整个芯片。CPU(处理器内核)是 SoC 的其中一个核心组成部分;SoC 是一整个芯片。
SoC 将 CPU 内核、存储器、DMA 以及各类片内外设集成到单颗芯片;CPU 负责指令执行与运算,依靠片内总线访问片上的存储器和外设;仅有 CPU 无法独立工作,必须搭配其他组件构成 SoC 才能实现完整功能。
片内外设
片内外设是集成在 SoC 芯片内、挂在片内总线上,CPU 内核之外的外围硬件模块的统称。片内外设包含普通功能外设(GPIO、UART、SPI、ADC、定时器等)与各类控制器(DMA 控制器、USB 控制器、SD 控制器等);各类控制器属于片内外设的一部分,控制器负责管理外部硬件设备,CPU 通过读写控制器的寄存器完成对外部设备的操作。CPU 内核组件、片上 RAM、Flash 不属于片内外设。
gcc -E main.c -o main.i .i纯C语言文件ESc, iso
gcc -S main.i -o main.s .s汇编语言文件
gcc -c main.s -o main.o .o 不可执行目标文件
gcc main.o -o main.out .out 连接可执行文件


Nor flash 可以被寻址,并且掉电不丢失,单片机,开机上次下载的代码还在
什么是块设备:
以固定大小的 “块” 为最小读写单位的存储设备,数据读写必须按整块操作,不能直接读写单个字节。
块设备是一类存储设备,以固定大小的数据块作为最小读写单位,不支持单字节直接读写,支持随机访问。硬盘、SD 卡、U 盘都属于块设备。块设备属于不可寻址外存,CPU 不能直接访问,需要通过对应的控制器,借助 DMA 将数据搬运到主内存后,CPU 才能处理数据,操作系统通过文件系统对块设备进行管理。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)