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

相关推荐
剑指offer.1 天前
ARM裸机开发-SPI
arm开发·嵌入式硬件·嵌入式·arm
susplus4 天前
【ARM 裸机开发 (IMX6ULL-mini)】I2C协议详解
嵌入式·arm·i2c
今年下半年6 天前
【运维】windows虚拟机安装arm(aarch64)服务器
运维·windows·arm·虚拟机·aarch64
额额额对了6 天前
SPI通信
linux·c语言·汇编·单片机·嵌入式硬件·arm
一直C7 天前
【ARM嵌入式开发】LCD液晶屏显示原理、色彩模式与显存地址映射详解
lcd·嵌入式·arm·寄存器·cortex-a7
susplus7 天前
【ARM 裸机开发 (IMX6ULL-mini)】PWM 背光调节与 GT9147 多点触摸驱动
lcd·arm·多点触控·pwm背光调节
凉、介8 天前
深入理解 ARM SCP Firmware 的 Event 与 Notification 机制
学习·scp·嵌入式·arm
susplus8 天前
【ARM 裸机开发 (IMX6ULL-mini)】SPI 协议与ADXL345 三轴加速度传感器
arm·spi·adxl345加速度传感器
susplus8 天前
【ARM 裸机开发 (IMX6ULL-mini)】RGB-LCD 驱动与时序详解
arm·rgb_lcd
额额额对了8 天前
嵌入式 ADC 从入门到实战:基于 i.MX6ULL 的裸机驱动开发
驱动开发·嵌入式硬件·arm