当前位置: 首页 > news >正文

ARM 架构与嵌入式系统

一、计算机系统基本组成

(一)硬件系统(冯・诺依曼结构)

由运算器、控制器、存储器、输入设备、输出设备五大核心部件组成:

  • 运算器:执行算术(加减乘除)和逻辑运算(与或非),核心是 ALU(算术逻辑单元)。
  • 控制器:指挥硬件协调工作,包含指令寄存器、程序计数器(PC)等,是系统的 “指挥中心”。
  • 存储器:存储数据和程序,分内存(RAM/ROM,速度快但容量小)和外存(硬盘 / Flash,容量大但速度慢)。
  • 输入设备:将外部信息传入计算机(如键盘、传感器、摄像头)。
  • 输出设备:将处理结果反馈到外部(如显示器、打印机、电机)。

(二)软件系统

  • 系统软件:管理硬件和支持应用的基础软件,包括操作系统(如 Windows、Linux)、编译器、驱动程序等。
  • 应用软件:为特定需求开发的软件(如办公软件、嵌入式控制程序)。

二、处理器分类

处理器是硬件系统的 “大脑”,按功能和场景分为多种类型:

类型全称核心特点与应用场景
CPU中央处理单元(Center Processing Unit)通用型处理器,集成运算器 + 控制器,负责系统整体调度(如电脑、服务器的 X86/ARM 处理器)。
GPU图形处理单元(Graphics Processing Unit)擅长并行计算,专注图形渲染和大规模数据处理(如显卡、AI 加速)。
FPU浮点处理单元(Float Processing Unit)专门处理浮点运算(如科学计算、3D 建模),常集成在 CPU 中。
MPU微处理器(Micro Processing Unit)面向通用计算,需外接内存和外设(如嵌入式 Linux 系统的 ARM Cortex - A 系列)。
MCU微控制器(Micro Control Unit)集成 CPU + 内存 + 外设(GPIO、UART 等),适合控制场景(如 STM32、51 单片机)。
DSP数字信号处理器(Digital Signal Processing)优化高频数学运算,用于音频 / 视频处理、雷达信号分析等(如 TI 的 TMS320 系列)。
SoC片上系统(System On Chip)集成 MPU/MCU + DSP + GPU + 外设(如 WiFi、蓝牙),一站式解决复杂场景(如手机芯片、智能汽车)。可类比为将市政府(MPU)、警察局(MCU)、研究所(DSP)和机场(调制解调器)等放在同一片土地(芯片)上,组成功能完善的 “城市(芯片)”。

三、内核框架(冯・诺依曼架构 vs 哈佛架构)

(一)冯・诺依曼架构

  • 特点
    • 指令和数据共用总线:程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,指令和数据通过同一组总线进行传输。这使得在某一时刻,总线只能进行取指令或数据读写操作,存在一定的传输瓶颈。
    • 存储器单一:只有一个统一的存储器,既存放指令又存放数据。
    • 指令执行顺序:通常按顺序执行指令,执行过程中先从存储器读取指令,再读取数据进行运算。
  • 优势
    • 结构简单,硬件成本较低,实现相对容易。
    • 程序和数据的存储管理较为方便,可灵活修改程序和数据。
  • 局限性
    • 由于指令和数据共用总线,在高速运行时,会出现总线冲突,影响系统性能。
    • 取指令和取数据不能同时进行,限制了计算机运行速度的提升。
  • 应用:大多数通用计算机(PC、服务器、手机 CPU 等)。

(二)哈佛架构

  • 特点
    • 指令和数据分开存储:拥有独立的指令存储器和数据存储器,两者物理上相互独立。
    • 独立的总线:有独立的指令总线和数据总线,这使得可以同时进行取指令和数据读写操作,大大提高了数据传输效率。
    • 指令执行:能够实现指令的预取和数据的并行处理,提升了系统的运行速度。
  • 优势
    • 数据传输带宽高,取指令和取数据可以同时进行,能充分发挥处理器的性能,适用于对实时性要求较高的场景。
    • 指令和数据分开存储,有利于提高系统的可靠性和安全性,比如可以对指令存储器进行只读保护,防止程序被篡改。
  • 局限性
    • 硬件结构相对复杂,成本较高。
    • 程序和数据分开存储,对软件编程和存储器管理要求较高,增加了软件开发的难度。
  • 应用:DSP(数字信号处理器)、部分单片机、早期计算机。

(三)ARM 内核与哈佛架构关联

ARM 内核存储结构偏向哈佛架构,具有以下特征:

  1. 缓存分离:多数 ARM 内核采用分离的指令缓存(I - Cache)和数据缓存(D - Cache)。以 Cortex - A 系列为例,指令和数据分别存储在不同缓存中,CPU 可同时从 I - Cache 读指令、从 D - Cache 读写数据,提升并行处理能力,类似哈佛架构指令和数据分开存储的理念。
  2. 独立总线(部分情况):一些 ARM 内核具备独立的指令总线和数据总线,支持同时进行指令读取和数据访问,进一步体现哈佛架构特性。

四、处理器架构:CISC 与 RISC

(一)CISC(复杂指令集架构)

  • 特点:指令多(数百条)、功能复杂,支持单指令完成复杂操作(如 X86 架构)。
  • 优势:编程直观,适合通用计算机(兼容性强)。
  • 劣势:结构复杂、功耗较高。

(二)RISC(精简指令集架构)

  • 特点:指令少(几十条)、功能简单,通过多条指令组合完成复杂操作(如 ARM、RISC - V 架构)。
  • 优势:结构简单、功耗低、执行效率高。
  • 劣势:编程需更多指令组合,适合嵌入式设备(手机、单片机)。

ARM 属于 RISC 架构,其低功耗、低成本和高性能的优势,使其广泛应用于移动设备、物联网设备等嵌入式领域。

五、ARM Cortex 系列

系列核心定位性能与功能特点典型应用场景
Cortex - A高性能通用计算(MPU)支持复杂操作系统(Linux/Android),带 MMU(内存管理单元),注重多任务和高性能,采用超标量流水线。智能手机、平板、服务器、汽车智能座舱等。
Cortex - R实时安全关键型控制(Real - time)强实时性(低延迟),带 MPU(内存保护单元),支持容错和安全特性,适合高可靠性要求场景。汽车刹车系统、工业控制、医疗设备等。
Cortex - M低功耗微控制器(MCU)结构精简,低成本低功耗,支持 RTOS(如 FreeRTOS),无 MMU(部分有 MPU),注重易用性和实时控制。物联网传感器、家电控制、嵌入式小设备等。

六、ARM 内核组成

ARM 内核是一个高度集成化的处理器核心,包含多个关键组件,它们协同工作,实现数据处理、控制和与外部设备交互等功能,以下是具体介绍:

运算处理组件

  • 算术逻辑单元(ALU):这是执行算术运算(如加、减、乘、除)和逻辑运算(如与、或、非、异或 )的核心部件。在处理数据时,ALU 从寄存器中获取操作数,进行相应运算后,再将结果写回到寄存器或存储器中。比如,在计算两个整数相加时,ALU 会执行加法运算,并把结果存储起来,以便后续使用。
  • 浮点运算单元(FPU,Floating - Point Unit):部分 ARM 内核配备 FPU,用于处理浮点数运算,能显著提升处理器在科学计算、图形处理、信号处理等领域的运算能力。例如在手机游戏的图形渲染中,FPU 可快速处理三维模型的坐标变换、光照计算等涉及浮点数的运算,使画面更加流畅、逼真。

寄存器组

  • 通用寄存器:是一组可用于存储数据、地址或中间运算结果的寄存器,不同的 ARM 架构通用寄存器数量和名称有所不同,如 ARMv7 架构中有 R0 - R15 等寄存器。通用寄存器使用灵活,在程序执行过程中,频繁用于暂存数据,减少对内存的访问次数,提高运算效率。例如,在执行一个简单的加法运算时,操作数可先暂存于通用寄存器,运算结果也可暂存其中。
  • 程序计数器(PC,Program Counter):用于存储下一条要执行指令的地址。在程序执行过程中,每执行完一条指令,PC 会自动更新,指向下一条指令的地址,从而保证程序按顺序执行。在遇到跳转指令时,PC 的值会被修改为目标地址,使程序跳转到相应位置继续执行。
  • 状态寄存器(CPSR,Current Program Status Register) :也叫程序状态寄存器,记录了程序执行过程中的各种状态信息,如运算结果是否为零、是否产生进位、是否溢出,以及处理器当前的工作模式等。这些状态信息会影响后续指令的执行,比如条件判断指令会依据状态寄存器中的标志位来决定程序的执行分支。

指令处理组件

  • 指令译码器:当指令从存储器或缓存中读取到 CPU 后,指令译码器会对指令进行解析,识别指令的操作码和操作数,确定指令要执行的操作(如数据传输、运算、跳转等),并将译码结果传递给其他相关组件,以控制它们协同完成指令的执行。
  • 流水线单元:现代 ARM 内核大多采用流水线技术,常见的有 3 级流水线(取指、译码、执行)、5 级流水线甚至更复杂的流水线结构。流水线技术允许处理器在同一时刻处理多条指令的不同阶段,提高了指令的执行效率。例如,在 5 级流水线中,当第一条指令处于执行阶段时,第二条指令可以进行译码,第三条指令进行取指,从而实现指令的并行处理,加快程序的运行速度。

存储管理与缓存组件

  • 内存管理单元(MMU,Memory Management Unit):在一些高端的 ARM 内核(如 Cortex - A 系列用于运行复杂操作系统的内核)中,MMU 用于实现虚拟地址到物理地址的转换,为操作系统提供内存保护、内存共享等功能,支持多任务操作系统的运行。通过 MMU,不同的进程可以拥有独立的虚拟地址空间,避免进程之间的内存冲突,同时还能实现内存的分页、分段管理,提高内存的使用效率。
  • 高速缓存(Cache):通常包括指令缓存(I - Cache)和数据缓存(D - Cache),用于存储近期可能会频繁访问的指令和数据。由于 Cache 位于 CPU 内部,访问速度比内存快很多,当 CPU 需要读取指令或数据时,首先会在 Cache 中查找,如果找到(命中),则直接从 Cache 中读取,减少对内存的访问次数,提升系统性能。

总线接口与中断处理组件

  • 总线接口单元:负责 ARM 内核与外部设备(如内存、各种外设)之间的数据、地址和控制信号的传输,通过不同的总线协议(如 AHB、APB 等)与外部设备进行通信,实现数据的读写和控制命令的发送与接收,保证内核与外部设备之间高效、稳定的交互。
  • 中断控制器:用于处理来自外部设备或内部异常的中断请求。当有中断发生时,中断控制器会根据中断的优先级,暂停当前正在执行的程序,保存现场(如寄存器的值),然后引导 CPU 执行相应的中断处理程序。处理完中断后,再恢复现场,继续执行原来的程序。中断机制使得处理器能够及时响应外部事件,提高系统的实时性和灵活性。

七、ARM 寄存器

(一)通用寄存器(R0 - R12)

通用寄存器主要用于临时存储数据、地址或运算结果,在汇编指令中直接参与数据处理,无固定功能限制,可自由使用。

  • R0 - R7:低组通用寄存器,所有模式下共用一组,无备份。常用于传递函数参数、保存临时变量(如MOV R0, #10表示将 10 存入 R0)。
  • R8 - R12:高组通用寄存器,在特权模式(如中断模式、管理模式)下有备份寄存器(R8_fiq - R12_fiq 等),减少模式切换时的数据保存开销,适合复杂运算或嵌套调用。

(二)特殊功能寄存器(R13 - R15)

这三个寄存器有固定功能,直接影响程序执行流程:

  1. R13(栈指针,SP):指向当前栈的顶部,用于管理函数调用、中断时的现场保护。栈遵循 “先进后出” 原则,函数调用时,通过PUSH {R0 - R3}将寄存器数据压入栈(SP 自动减小);函数返回时,通过POP {R0 - R3}将数据从栈中恢复(SP 自动增大)。不同模式下有独立的 SP 备份(如 SP_irq、SP_svc),避免模式切换时栈数据冲突,且必须初始化(如程序启动时MOV SP, #0x20000000定义栈的起始地址)。
  2. R14(链接寄存器,LR):保存函数调用或异常发生时的 “返回地址”,用于执行完成后回到原程序。执行BL 函数名(带返回的跳转)时,CPU 自动将下一条指令的地址存入 LR,然后跳转到函数入口;函数结束时,通过MOV PC, LR将 LR 中的地址送回程序计数器(PC),实现返回。
  3. R15(程序计数器,PC):始终指向下一条要执行的指令地址,控制程序的执行顺序。CPU 每执行一条指令,PC 会自动增加(增加的值取决于指令长度,ARM 指令为 4 字节,Thumb 指令为 2 字节);跳转指令(如B 标签BL 函数)会直接修改 PC 的值,实现程序流程跳转。

(三)特殊程序状态寄存器

  • CPSR(当前程序状态寄存器):保存当前程序的状态,如运算结果的标志位(N/Z/C/V)、中断屏蔽位(I/F)、当前模式位(M [4:0])等。例如,运算结果为 0 时,Z 位会置 1;开启中断时,需清除 I 位(CPSIE I)。
  • SPSR(保存程序状态寄存器):仅在异常模式下存在,用于保存进入异常前的 CPSR 值,退出异常时恢复(MOVS PC, LR会自动恢复 SPSR 到 CPSR)。

八、通用寄存器与外设寄存器区别

对比项通用寄存器外设寄存器
位置CPU 内部外设内部(内存映射)
访问速度极快(CPU 内部总线)较慢(系统总线访问)
用途临时数据 / 地址存储控制外设、读取状态
数量很少(固定)较多(随外设而定)
地址无固定内存地址(CPU 内部)有固定内存映射地址
掉电数据丢失部分有硬件保持(如状态寄存器)

内存映射机制:ARM 系统将外设寄存器、RAM、Flash 等都映射到同一个地址空间,CPU 通过不同的地址来区分访问的是哪种资源,所以操作外设寄存器时,看起来像在操作普通内存地址。

九、ARM 处理器工作模式

ARM 有 7 个基本工作模式:

  • User(用户模式):非特权模式,大部分常规任务在该模式下执行。
  • FIQ(快速中断模式):当高优先级(快速)中断产生时进入,用于快速响应紧急中断。
  • IRQ(外部中断模式):低优先级(普通)中断产生时进入,处理一般的外部中断。
  • Supervisor(管理模式):复位或软中断指令执行时进入,用于系统管理等操作。
  • Abort(数据访问终止模式):存取异常时进入,处理内存访问错误等情况。
  • Undef(未定义指令模式):执行未定义指令时进入,对不被识别的指令进行处理。
  • System(系统模式):使用与 User 模式相同寄存器集的特权模式,可执行特权操作。

此外,Cortex - A 系列还有特有模式Monitor(监控模式),是为安全扩展的、用于执行安全监控代码的特权模式;还有Hyp 模式,主要为测试使用。

十、ARM 异常处理

(一)异常产生时,ARM 内核的动作

当系统发生异常(如中断、指令错误等)时,ARM 内核自动执行以下步骤:

  1. 保存当前状态:把 CPSR(当前程序状态寄存器)的内容拷贝到 SPSR_<mode>(对应异常模式的程序状态备份寄存器)。CPSR 记录处理器当前工作状态(如中断使能、处理器模式等),备份是为了异常返回时恢复。
  2. 配置 CPSR,进入异常模式
    • 改变处理器状态为 ARM 态(与 Thumb 态区分,Thumb 是 16 位精简指令,ARM 是 32 位完整指令,异常处理需用 ARM 态)。
    • 切换处理器模式到对应的异常模式(如 FIQ、IRQ、Data Abort 等)。
    • 若需要,设置中断禁止位,禁止相应中断(防止异常处理被其他中断干扰)。
  3. 保存返回地址:把异常发生时的返回地址保存到 LR_<mode>(对应异常模式的链接寄存器),以便异常处理完成后能回到正确位置继续执行。
  4. 跳转到异常处理程序:设置 PC(程序计数器)为对应异常向量的地址(不同异常有固定向量偏移量,如 Reset 对应 0x00,Undefined Instruction 对应 0x04 等),从而进入异常处理程序。

(二)异常返回时的动作

异常处理完成后,执行以下操作恢复正常执行:

  1. 恢复处理器状态:从 SPSR_<mode>恢复 CPSR 的内容,让处理器回到异常发生前的工作状态;从 LR_<mode>恢复 PC 的值,回到异常发生时的下一条指令地址,继续执行程序。
  2. 注意事项:这些恢复操作只能在 ARM 态下执行(不能在 Thumb 态)。

(三)异常向量表(Vector Table)

不同异常有固定的内存地址偏移(如 Reset 是 0x00,IRQ 是 0x18 等)。当异常发生时,PC 会被设置为 “向量表基地址 + 偏移量”,从而跳转到对应的异常处理入口。

这张表完整呈现了 ARM 处理器 “从异常触发→进入异常处理→恢复正常执行” 的全流程,以及异常向量表的地址分配逻辑,是理解 ARM 异常机制的核心内容。

http://www.dtcms.com/a/392274.html

相关文章:

  • ARM(14) - LCD(1)清屏和画图形
  • Linux第十九讲:传输层协议UDP
  • 计算机网络学习(四、网络层)
  • 开启科学计算之旅:《MATLAB程序设计》课程导览
  • MATLAB | 数学模型 | 传染病 SIR 模型的参数确定
  • MATLAB基本运算(2)
  • 小红书数据分析面试题及参考答案
  • SpringCloudStream:消息驱动组件
  • ret2text-CTFHub技能树
  • VirtualBox 7 虚拟机的硬盘如何扩大?
  • React新闻发布系统 权限列表开发
  • 23种设计模式之【策略模式】-核心原理与 Java 实践
  • 前端实战从零构建响应式井字棋游戏
  • Java中的equals()与hashCode()
  • 【绕过open_basedir】
  • 如何用户细分
  • 福彩双色球第2025109期篮球号码分析
  • 思考:客户端负载均衡和服务器负载均衡有什么区别?
  • 网络编程day04/05原始套接字
  • Yarn命令与npm命令的区别与联系(npm:Node.js的官方包管理工具;Yarn:Facebook开发的JavaScript包管理工具)
  • 【大语言模型 67】梯度压缩与稀疏通信
  • LeetCode第365题_水壶问题
  • OpenCV:DNN 模块实现图像风格迁移
  • 锤子助手插件功能六十四:禁用视频前置摄像头镜像
  • OpenHarmony NFC Tag驱动深度剖析:从HDF框架到NDEF读写全流程实战
  • 黑马头条_SpringCloud项目阶段四:多媒体短文章提交功能实现详解
  • TraceID串联数据孤岛:勤源全链路可观测性平台破解微服务“黑箱困境”
  • 随机梯度下降(SGD)算法及其在机器学习中的应用
  • 趣谈bug - the Norway problem
  • $attrs 和 $listeners 的使用场景和用法是什么?