Linux开发——ARM介绍
在嵌入式和Linux开发领域,ARM架构因其低功耗、高性能和广泛的应用而备受青睐。本文将从基础知识入手,对RISC与CISC、冯·诺伊曼与哈佛架构、ARM内核结构、工作模式以及异常向量表进行介绍和说明。
1. 什么是RISC与CISC?
CISC (Complex Instruction Set Computer):复杂指令集计算机。以x86为代表,CISC架构的特点是指令丰富且复杂,单条指令可完成较为复杂的操作,但解码和执行电路复杂,功耗较高。
RISC (Reduced Instruction Set Computer):精简指令集计算机。以ARM为代表,RISC架构强调简化指令,所有指令大多在一个时钟周期内完成,硬件实现相对简单,效率高、能耗低。
📌 对比示意图:
CISC: 一条指令 -> 多个操作 (复杂)
RISC: 一条指令 -> 单一操作 (精简)
2. 冯·诺伊曼架构与哈佛架构
冯·诺伊曼结构:指令和数据共用一组总线,CPU分时获取指令和数据。优点是硬件简单,缺点是“瓶颈”问题(指令和数据不能同时访问)。
哈佛结构:指令和数据分开存放,通过两组独立的总线访问,可以同时取指和取数,效率更高,但硬件设计更复杂。
ARM内核架构:属于 混合架构,在指令和数据访问上融合了两种结构的优点。例如,存储器层次上可能采用哈佛结构,而总线接口部分表现为冯·诺伊曼结构。
📌 示意图:
冯·诺伊曼结构: [CPU] --一条总线-- [存储器(指令+数据)]
哈佛结构: [CPU] --指令总线-- [指令存储器]--数据总线-- [数据存储器]
3. ARM内核包含的基本组成
ARM内核是ARM处理器的核心部分,主要包含以下功能单元:
通用寄存器(R0-R15):存放数据和地址。
ALU (Arithmetic Logic Unit):算术逻辑单元,用于执行运算和逻辑操作。
Cache(高速缓存):提升数据访问速度。
CPSR (Current Program Status Register):当前程序状态寄存器,用于保存条件码、中断屏蔽位、处理器模式等信息。
SPSR (Saved Program Status Register):程序状态备份寄存器,用于在异常发生时保存CPSR。
PC (Program Counter):程序计数器,存放下一条要执行的指令地址。
LR (Link Register):链接寄存器,用于存放子程序返回地址。
SP (Stack Pointer):栈指针,用于管理函数调用和中断时的堆栈操作。
4. ARM的工作模式
ARM处理器支持多种工作模式,不同的模式决定了寄存器和系统的访问权限:
User 模式:非特权模式,大多数应用程序运行在此模式。
FIQ (Fast Interrupt Request):高速中断模式,响应高优先级中断。
IRQ (Interrupt Request):普通中断模式,响应低优先级中断。
Supervisor (SVC):管理模式,系统调用、复位后进入此模式。
Abort:存取异常模式,用于处理存储器访问错误。
Undef:未定义指令模式。
System:与User模式类似,但具备特权权限。
📌 模式切换示意图:
异常/中断发生 → 切换到特定模式 → 保存上下文 → 执行对应处理程序
5. 异常向量表
异常向量表是ARM处理器中用于处理异常和中断的重要机制。它是一张表,存放在固定的内存地址处,用于指引CPU在不同异常发生时跳转到对应的异常处理入口。
异常处理流程:
将当前CPSR内容保存到对应的SPSR寄存器。
设置CPSR的相关位,进入ARM态和异常模式。
将PC加载为异常向量表中的对应地址。
📌 常见异常向量表:
地址偏移 异常类型
0x00 Reset (复位)
0x04 Undefined Instruction (未定义指令)
0x08 SWI (软件中断)
0x0C Prefetch Abort (取指异常)
0x10 Data Abort (数据异常)
0x14 保留
0x18 IRQ (普通中断)
0x1C FIQ (快速中断)
📌 示意图:
+------------------------+
| 0x00 Reset |
| 0x04 Undefined |
| 0x08 SWI |
| 0x0C Prefetch Abort |
| 0x10 Data Abort |
| 0x14 Reserved |
| 0x18 IRQ |
| 0x1C FIQ |
+------------------------+
总结
ARM作为典型的RISC架构处理器,结合了哈佛与冯·诺伊曼架构的优势,具备灵活的工作模式和完善的异常处理机制。在Linux开发和嵌入式应用中,理解ARM内核结构和异常处理机制是深入掌握系统开发的关键。