硬件(4)——ARM体系架构

kernel(内核):x86、8051、MIPS、ARM。

前面介绍的51单片机,使用的是8051内核,我们使用的Windows电脑用的是x86内核。本文将介绍ARM内核。

一、基本概念

1. 指令集架构

CISC (Complex Instruction Set Comouter):复杂指令集计算机。eg:x86。

  • 芯片面积大,加工成本高,复杂、体积大、功耗大
  • 28效应:80%的情况下只使用到20%的功能

RISC (Reduced Instruction Set Comouter):精简指令集计算机。eg:ARM。

  • 芯片面积小,加工成本低,功耗低、体积小,用于便携式设备。
  • 对于28效应的问题,减少了80%的功能。

2. ARM系列

ARM是一家只设计内核,不生产芯片,供给半导体厂商的公司。

ARM系列的版本经过了ARM1 ~ ARM11的升级,现在最新版本是Cortex版本。

Cortex 三大领域系列:

  • A:Application,应用领域。eg:手机、应用电子领域。
  • R:Real time,实时性领域。eg:汽车电子、航空航天。
  • M:Micro,微控制器领域。eg:MCU、单片机。

现在的ARM,精简指令集计算机,imx6null,Cortex-A7内核,32位存储器(一条指令占4byte)

stm32(32位单片机)使用的是ARM架构的芯片,Cortex-M3内核

3. ARM内核结构组成

3.1 寄存器

R0~R12:通用寄存器,存放数据。

SP寄存器(R13):stack pointer,栈指针寄存器。用来管理栈区,可以直接使用的栈区指针,一直指向栈顶。

LR寄存器(R14):linked register,链接寄存器。保存函数的返回地址。

PC寄存器(R15):program counter,程序计数器。本质上是一个指针,指向当前正在执行指令的下一条指令。

三级流水线结构(三级同时并行执行):

  1. PC取指令

  2. 通过译码器翻译

  3. 交给kernel执行指令

PSR(状态指示寄存器)

  • cpsr寄存器:current program status register,当前程序状态寄存器。保存程序运行到某一步时的状态(溢出、进位、借位等)。
  • spsr寄存器:save program status register,保存/备份程序状态寄存器。异常发生时,保存cpsr寄存器中的程序状态。

3.2 内部单元

ALU:算术逻辑单元,与R0~R12搭配使用,控制存储。

MMU:Mermory Manager Unit,内存管理单元。用于管理虚拟内存到物理内存映射,从而提高物理内存的利用率。ARM的物理内存:512MB。

Cache:高速数据缓存。直接从cache访问数据,提高CPU访问速度。

  • icache:instruction,指令缓存
  • dcache:data,数据缓存

内存存储架构:

冯.诺依曼架构:数据和指令存放到同一片内存。

哈佛架构:数据和指令独立存储。(ARM)

3.3 内部总线

单总线通信:通过一根线/一组线和外设通信,和某个外设通信时,其他外设接不进来。

双总线通信

  • AHB总线:先进高速总线,连接通信速率快的外设(USB、网卡、RAM)。
  • APB总线:先进外设总线,连接通信速率慢的外设(GPIO、UART)。

4. 编译

s3c2440 --- ARM920T,RAM:4KB

内核代码是汇编语言。

编译流程

  • 预处理(.i):展开头文件、宏定义替换、条件编译(#if #endif)
  • 编译(.s):将C语言编译成汇编语言。
  • 汇编(.o):将汇编语言编译成二进制计算机语言。
  • 链接 :链接成一个可执行文件。

交叉编译:在一个平台编写编译程序,在另外一个平台运行程序。

二、电子硬件

1. 三极管

PNP发射极接VCC,基极接低电平导通;NPN发射极接GND,基极接高电平导通。

2. 存储器

计算机系统的硬件组成:控制器、运算器、输入设备、输出设备、存储器。

1). 三级存储系统

|------------|--------|--------|----------|
| 名称 | 速度 | 容量 | 价格 |
| cache | 快 | 慢 | 小 | 大 | 昂贵 | 便宜 |
| 主存储器(RAM) | 快 | 慢 | 小 | 大 | 昂贵 | 便宜 |
| 辅助存储器(ROM) | 快 | 慢 | 小 | 大 | 昂贵 | 便宜 |

RAM:易失性存储器。最新版本:iram。

ROM:非易失性存储器。最新版本:flash闪存。

2). flash分类:

nor flash:每一个字节可以被寻址,有数据总线和地址总线。

nand flash:无法被寻址,以固定块大小写入或读取数据。

3). 指令集版本

指令集版本:armv1 - armv8

  • imx6ull -> Cortex-A7 -> armv7
  • S3C2440 -> ARM920T -> armv4
  • exnoy4412 -> CortexA8 -> armv8

三、ARM内核架构

1. 处理器工作模式

ARM有7个基本工作模式,还有两个Cortex-A特有模式。

  • **User:**非特权模式,大部分任务执行在这种模式(使用寄存器最少的模式)
  • FIQ:当一个高优先级(fast)中断产生时将会进入这种模式
  • IRQ:当一个低优先级(normal)中断产生时将会进入这种模式
  • Supervisor:当复位或软中断指令执行时将会进入这种模式(管理员SVC,默认模式)
  • Abort:当存取异常时将会进入这种模式
  • Undef:当执行未定义指令时会进入这种模式
  • System:使用和User模式相同寄存器集的特权模式。

2. ARM寄存器

ARM有37个寄存器,Cortex-A有40个寄存器。

ARM每个工作模式的sp、lr、pc寄存器都是独立的。

程序状态寄存器

B5 --- T,处理器状态位

M[4:0] --- Mode,处理器模式位

  • User : 10000
  • FIQ :10001
  • IRQ :10010
  • Supervisor :10011
  • Abort :10111
  • Undefined:11011
  • System :11111

3. 异常处理流程

1).当异常产生时, ARM :

  • 拷贝 CPSR 到 SPSR
  • 设置适当的 CPSR 位:改变处理器状态进入ARM态(默认状态,不用改变),改变处理器模式进入相应的异常模式
  • 保存返回地址到 LR
  • 设置 PC 为相应的异常向量

2).返回时, 异常处理需要:

  • 从 SPSR恢复CPSR
  • 从LR恢复PC
  • Note:这些操作只能在 ARM 态执行

中断向量表:存放中断服务函数的入口地址的数组。

异常向量表:存放跳转到对应异常服务函数的指令的数组。

ARM有七种异常指令。

四、汇编指令

汇编指令放在.s文件中,每条指令后不用加分号。注释不用"//",用";"

1. MOV 赋值

1). MOV <Rd>,#<const>

  • Rd:目标寄存器。

  • const:常量。

    MOV r0,#1 ;r0=1

2). MOV <Rd>,<Rm>

  • Rd:目标寄存器。

  • Rm:第一操作数寄存器

    mov r2,r1 ;r2=r1

3). MOV <Rd>,<Rm>,<type> #<n>

  • ASR:算术右移,针对于有符号数,最高位补符号位。

  • LSR:逻辑右移,针对于无符号数,最高位补0。

  • ROR:循环右移,将移出的最低位补到最高位。

  • LSL:逻辑左移,低位补0。

    mov r3,r2,lsl #3 ;r3=r2<<3
    mov r4,r3,asr r0 ;r4=r3>>1

2. ADD 加法

1). ADD <Rd>,<Rn>,#<const>

复制代码
add r0,r3,#2    ;r0=r3+2

2). ADD <Rd>,<Rn>,<Rm>

bash 复制代码
add r0,r1,r2    ;r0=r1+r2

3). ADD <Rd>,<Rn>,<Rm>,<type>,<Rs>

cpp 复制代码
mov r3,r2,r1,lsl r0   ;r3=r2+(r1<<r0)
相关推荐
平凡的阳阳3 小时前
OpenClaw 2026.3.23 重大更新:千里通 Arm 架构 Linux 小主机完配“小龙虾”,开启轻量级 AI 新纪元
linux·arm开发·openclaw·小龙虾
senijusene4 小时前
ARM 架构知识解析:从基础概念,到指令集,再到异常处理
arm开发·架构
孤影过客5 小时前
Flutter优雅构建:从零打造开发级工作流
arm开发·数据库·flutter
青桔柠薯片5 小时前
ARM 体系架构基础学习笔记
arm开发·学习·架构
Hello World . .8 小时前
ARM体系架构
arm开发
somi71 天前
ARM-03-点亮led
arm开发
somi71 天前
ARM-04-蜂鸣器
arm开发·单片机·嵌入式硬件
EnglishJun1 天前
ARM嵌入式学习(九)--- C语言应用:点亮led
c语言·arm开发·学习
程序员一点1 天前
第24章:openEuler 内核与模块管理
arm开发·openeuler