1. RISC 和 CISC 的区别

RISC(Reduced Instruction Set Computer,精简指令集计算机)和 CISC(Complex Instruction Set Computer,复杂指令集计算机)是两种主流的指令集架构设计哲学。

  • RISC(精简指令集):指令格式统一、种类少、长度固定,大多数指令在一个时钟周期内完成。其特点是芯片设计简单、成本低、体积小、功耗低。典型的 RISC 架构包括 ARM、RISC-V、MIPS 等。
  • CISC(复杂指令集):指令数量多、长度可变、功能强大,一条指令可以完成复杂的操作。其特点是性能强劲,但芯片设计复杂、成本高、功耗大。典型的 CISC 架构是 x86。

2/8 效应:研究表明,程序中 80% 的指令只使用了指令集中 20% 的简单指令。RISC正是基于这一观察,只保留最常用的简单指令,通过组合这些简单指令来完成复杂操作,从而在保证性能的同时降低功耗和成本。

2. Cortex-A7内核中有多少个通用寄存器?

Cortex-A7内核属于ARMv7-A架构,共有 16 个 32 位通用寄存器,编号为R0~R15。

  • R0~R12:通用寄存器,用于存放数据或地址。
  • R13(SP):栈指针寄存器。
  • R14(LR):链接寄存器。
  • R15(PC):程序计数器。

注意:虽然R13、R14、R15有特殊用途,但它们也属于通用寄存器组的一部分。此外,Cortex-A7 还有 CPSR 和 SPSR 等状态寄存器,但它们不属于通用寄存器范畴。

3. PC、LR、SP、CPSR、SPSR 寄存器的作用

寄存器 全称 作用
PC (R15) Program Counter,程序计数器 本质上是一个指针,指向CPU当前正在执行的指令的下一条指令的地址。ARM 采用三级流水线(取指→译码→执行),PC 始终指向正在取指的指令地址。
LR (R14) Link Register,链接寄存器 用于保存函数或子程序的返回地址。当执行BL(带链接的跳转)指令调用子程序时,LR自动保存下一条指令的地址;子程序返回时,将LR的值赋给PC即可。
SP (R13) Stack Pointer,栈指针寄存器 用于管理栈空间。栈是一种“先进后出”的数据结构,SP始终指向当前栈顶。压栈时SP减小,弹栈时SP增大。
CPSR Current Program Status Register,当前程序状态寄存器 存放程序运行到当前时刻的相关状态信息,包括:条件标志位(N、Z、C、V)、中断禁止位、处理器工作模式位等。
SPSR Saved Program Status Register,保存程序状态寄存器 当异常发生时,用于保存被中断程序的CPSR值,以便异常处理结束后恢复现场。每种异常模式都有自己的SPSR。

4. MMU 和 Cache 的作用

MMU(Memory Management Unit,内存管理单元)

MMU 的主要作用是将程序中的虚拟地址映射到实际的物理地址,从而提高物理内存的利用率。

  • 程序运行时看到的是一个连续的 4GB 虚拟地址空间,而实际的物理内存可能只有 512MB。
  • MMU 负责将虚拟地址映射到分散的物理内存页框中,使得多个程序可以安全地共享物理内存。
  • 在嵌入式系统启动初期,通常需要关闭 MMU,直接操作物理地址。

Cache(高速缓存)

Cache 用于提高 CPU 访问数据的速度,解决 CPU 速度与内存速度不匹配的问题。

  • ICache(指令缓存):缓存指令,减少 CPU 取指令的等待时间。
  • DCache(数据缓存):缓存数据,减少 CPU 读写数据的等待时间。

在嵌入式系统初始化时,通常先打开 ICache 以提高指令执行效率,而关闭 DCache 以避免数据一致性问题,待 MMU 和内存系统初始化完成后再开启 DCache。

5. NOR Flash 和 NAND Flash的区别

特性 NOR Flash NAND Flash
寻址方式 支持随机访问,每个字节都可以被直接寻址,带有独立的地址总线和数据总线 块设备,以页(通常512字节或更大)为单位访问
读取速度 快,类似RAM,支持XIP(片上执行) 较慢,需要先将数据读到RAM中再执行
写入/擦除速度
容量 较小(通常几MB~几十MB) 大(几百MB~几TB)
成本
可靠性 好,坏块少 需要坏块管理
典型用途 存储启动代码(如BIOS、U-Boot),可直接运行 大容量数据存储(如文件系统、多媒体数据)

总结:NOR Flash 像内存一样可以直接读取和执行代码,适合存放启动程序;NAND Flash 容量大、成本低,适合存放操作系统、文件系统等大块数据。

6. ARM 处理器的 7 种工作模式

ARM 处理器(Cortex-A 系列)共有 7 种工作模式:

在这里插入图片描述

模式 英文 说明
用户模式 UER 正常程序运行的模式,权限受限
快速中断模式 FIQ 用于高速数据传输或通道处理
外部中断模式 IRQ 用于普通中断处理
管理模式 SVC 操作系统保护模式,处理软件中断(SWI)和复位
数据访问中止模式 ABT 当数据或指令预取中止时进入
未定义指令中止模式 UND 当执行未定义指令时进入
系统模式 SYS 运行特权操作系统任务,与用户模式共享寄存器组

除用户模式外,其他 6 种模式均为特权模式,可以访问所有系统资源。不同的模式拥有独立的寄存器组(如 SP、LR、SPSR),以便在模式切换时保护现场。

7. ARM 异常处理流程

当 ARM 处理器检测到异常发生时,硬件自动执行以下步骤:

  1. 保存返回地址:将当前 PC 的值保存到对应异常模式的 LR 寄存器中。
  2. 保存 CPSR:将当前 CPSR 的值保存到对应异常模式的 SPSR 中。
  3. 切换模式:根据异常类型,强制切换到对应的异常工作模式。
  4. 禁止中断:根据需要设置 CPSR 中的中断禁止位(如进入 IRQ 模式时自动禁止 IRQ)。
  5. 跳转到异常向量表:PC跳转到异常向量表中对应的入口地址,开始执行异常处理程序。

异常处理完成后,通过执行MOVS PC, LRSUBS PC, LR, #4等指令恢复现场:

  • 将SPSR恢复到CPSR。
  • 将LR中的返回地址恢复到PC,继续执行被中断的程序。

8. 异常向量和异常向量表

在这里插入图片描述

异常向量

异常向量是跳转到异常服务函数的指令的地址。每个异常类型对应一个固定的入口地址,这些地址在ARM 架构中是预定义的。

异常向量表

异常向量表本质上是一个数组,数组中存放的是跳转到对应异常服务函数的指令(通常是BLDR指令)。ARM 的异常向量表通常位于内存的起始地址(0x00000000)或高地址(0xFFFF0000)。

典型的ARM异常向量表布局(以 ARMv7-A 为例):

地址偏移 异常类型 指令示例
0x00 复位(Reset) B reset_handler
0x04 未定义指令(Undefined Instruction) B undef_handler
0x08 软件中断(SWI) B swi_handler
0x0C 预取中止(Prefetch Abort) B prefetch_abort_handler
0x10 数据中止(Data Abort) B data_abort_handler
0x14 保留(Reserved)
0x18 外部中断(IRQ) B irq_handler
0x1C 快速中断(FIQ) B fiq_handler

注意:异常向量(B reset_handler中的地址)和中断向量(如 NVIC 中的中断服务函数入口地址)是不同的概念。异常向量是CPU硬件固定的跳转入口,而中断向量是外设触发的、由中断控制器管理的服务函数地址。

9. AHB 和 APB 总线

AHB(Advanced High-performance Bus)和 APB(Advanced Peripheral Bus)是 ARM 公司 AMBA 总线规范中的两种总线类型。

特性 AHB(先进高速总线) APB(先进外设总线)
速度 高速,支持突发传输 低速,简单接口
连接设备 高性能设备:CPU、DMA、外部内存控制器(如DDR控制器)、USB、网口等 低速外设:GPIO、UART、I2C、SPI、定时器(Timer)等
架构 多主多从,支持流水线操作 单主(通常桥接自AHB),简单控制
数据宽度 32/64/128位 32位(固定)

在 i.MX6ULL 芯片中,Cortex-A7 内核通过 AHB 总线与高速设备(如 DDR 控制器、NAND 控制器)通信,而低速外设则通过 APB 总线连接,两者之间通过总线桥进行转换。

10. i.MX6ULL芯片的内核版本

NXP i.MX6ULL 芯片使用的内核是 Cortex-A7,属于 ARMv7-A 架构。

  • 内核版本:Cortex-A7
  • 指令集架构版本:ARMv7-A
  • 位宽:32位

作为对比:

  • S3C2440:ARM920T 内核 → ARMv4T 架构
  • Exynos 4412:Cortex-A9 内核 → ARMv7-A 架构
  • 高端手机芯片(如骁龙 8 系列):Cortex-A75/A76 等 → ARMv8-A 架构(64 位)
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐