ARM入门学习Day01|ARM体系架构核心知识点梳理

一、基础代码小案例

int i = 0xFFFFFFFF;

i+=1;

0xFFFFFFFF 加1后会发生溢出,这在ARM底层运算中会影响状态寄存器的标志位,也是理解CPSR寄存器的一个小例子。

pc初始示例地址:0x2000000

二、栈基础:先进后出,后进先出

栈操作规则:出栈时,从sp指向的位置取出数据,sp++。

SP寄存器专门用来管理栈空间,栈在嵌入式裸机、RTOS、Linux内核中都非常关键,函数局部变量、函数返回地址都依赖栈。

三、ARM内核通用寄存器(16个通用寄存器)

|---------------|---------------------|--------------------------|
| 寄存器别名 | 全称 | 作用说明 |
| R0R12 | 通用寄存器 | 用来存放普通运算数据 |
| R13 | SP(Stack Pointer) | 栈指针寄存器,管理栈区空间 |
| R14 | LR(Linked Register) | 链接寄存器,保存函数返回地址 |
| R15 | PC(Program Counter) | 程序计数器,指针,指向下一条要执行的指令 |

ALU:算术逻辑单元,负责完成CPU所有算术、逻辑运算。

四、CISC复杂指令集 vs RISC精简指令集

CISC 复杂指令集计算机

特点:指令功能多、芯片复杂、成本高、体积大、功耗大。

RISC Reduced Instruction Set Computer 精简指令集计算机

特点:指令功能少、芯片简单、成本低、体积小、功耗低。

ARM就是做RISC精简指令集CPU架构设计的公司,本身不生产芯片,把架构授权给各个半导体厂商,厂商再生产实际芯片。

五、ARM内核系列分类

ARM内核分为三大系列,对应不同应用场景:

1. CortexA:Application 应用领域

面向操作系统,跑Linux、安卓系统

  • CortexA5:早期智能机

  • CortexA7:IMX6ULL、STM32MP157(学习板常用)

  • CortexA8:三星早期手机

  • CortexA9:三星Exynos4412

  • CortexA725:玄戒O1

2. CortexR:RealTime 实时领域

汽车电子、工业高实时性场景。

3. CortexM:MCU单片机控制领域

单片机,裸机开发,不跑Linux

  • CortexM3:STM32F103

  • CortexM4:STM32F407、STM32MP157

STM32F103:意法半导体ST生产,CPU内核由ARM公司设计。

指令集版本:armv7、armv8。

架构:冯诺依曼架构:数据和指令共用同一块存储空间。

六、状态寄存器 & MMU内存管理单元

  1. CPSR:程序状态寄存器,记录程序运行状态、运算标志位。

  2. SPSR:保存程序状态寄存器,发生异常的时候备份CPSR的值,异常退出时恢复。

MMU Memory Management Unit 内存管理单元

  • 功能:虚拟地址转换为物理地址,依靠页表完成映射

  • 裸机开发:关闭MMU,直接操作物理内存

  • Linux驱动开发:打开MMU,使用虚拟内存

每个进程拥有4GB虚拟内存空间。

七、大小端存储模式

内存存储多字节数据,分为大端、小端模式:

  1. 大端模式:高地址存放低数据位;低地址存放高数据位。网络通信一般用大端。

  2. 小端模式:高地址存放高数据位;低地址存放低数据位。ARM芯片默认小端模式。

八、总线简单了解

  • 单总线:内核和外设共用一组总线通信。

  • 双总线/多总线:高速外设使用AHB总线(Advanced Highspeed Bus先进高速总线),速度更快。

九、交叉编译

交叉编译:在A平台编写编译程序,生成可执行文件,放到另一个不同架构的B平台运行。

比如电脑x86平台编译ARM开发板运行的程序,就是交叉编译。

十、Flash存储:Nor Flash vs Nand Flash

  1. Nor Flash:可以按字节寻址,具备独立地址总线、数据总线。可以直接运行代码。

  2. Nand Flash:块设备,以512字节为一块进行读写,不能直接运行程序。

Flash属于非易失存储器,断电数据不丢失;内存SDRAM是易失存储器,断电丢失数据。

十一、中断向量表 / 异常向量表

  • 中断向量表:本质数组,存放中断服务函数入口地址。

  • 异常向量表:本质数组,存放跳转到异常服务函数的汇编指令。

ARM7/ARM9开发板异常向量表地址常见:0x00000000 或者 0xFFFF0000。

向量表包含:Reset复位、Undefined instruction未定义指令、SWI软件中断、Prefetch Abort预取中止、Data Abort数据中止、IRQ普通中断、FIQ快速中断。

十二、ARM三种移位运算

  1. 逻辑右移 LSR:无符号数移位,最高位补0

示例:1011 0010 LSR 1 → 0101 1001

  1. 算术右移 ASR:有符号数移位,最高位补符号位

示例:1011 0010 ASR 1 → 1101 1001

  1. 循环右移 ROR:最低位移出,补到最高位

示例:1011 0010 ROR 1 → 0101 1001;再ROR1得到1010 1100

相关推荐
T1mzhou16 小时前
ARM64 Linux 6.10 内核驱动(12):dd.c:probe/ remove、延迟 probe
linux·服务器·c语言·arm开发·arm
T1mzhou20 小时前
ARM64 平台安全学习记录
linux·服务器·arm开发·arm
zhangzhangkeji1 天前
stm32 3-4 : 按键控制 LED,光敏传感器控制蜂鸣器
stm32·arm
zhangzhangkeji2 天前
stm32 ,3-2:led 闪烁、流水灯、蜂鸣器
stm32·arm
zhangzhangkeji2 天前
stm32 笔记 - 3-1:GPIO 输出
stm32·arm
零依赖极客3 天前
Day 6·1 ARMv8.2 dotprod——vdotq_s32 一条指令做 4 个点积
c语言·开发语言·人工智能·矩阵·arm·vllm
奔跑的架构师3 天前
[A-50]ARMv9/v8-DVFS系统架构
linux·arm开发·架构·系统架构·arm
zhangzhangkeji3 天前
stm32 笔记 - 2:库函数方式的初始化,项目的文件结构
stm32·arm
zhangzhangkeji3 天前
stm32 笔记 - 1:, 环境与项目搭建, 寄存器方式点灯
arm