1、架构包含哪几部分内容
- 寄存器
- 处理模式
- 流水线
- MMU
- 指令集
- 中断
- FPU
- 总线架构
2、以STM32为例进行介绍
2.1 寄存器
寄存器 | 名称 | 作用 |
---|---|---|
R0-R3 | 通用寄存器 | 用于数据传递、计算及函数参数传递;R0 也用于存储函数返回值。 |
R4-R12 | 通用寄存器 | 用于存储局部变量,减少频繁的内存访问。 |
R13 | 栈指针 (SP) | 指向当前栈顶,负责管理栈操作。分为主栈指针 (MSP) 和 进程栈指针 (PSP):系统中断处理和普通任务可以使用不同的栈。栈指针用于管理栈的操作,包括函数调用时保存现场和中断处理时保存寄存器状态。 |
R14 | 链接寄存器 (LR) | 保存函数调用返回的地址,函数返回时恢复程序执行。 |
R15 | 程序计数器 (PC) | 指向当前执行的指令地址,控制程序执行的流程。 |
xPSR | 程序状态寄存器 | 包含条件标志 (N, Z, C, V) 以及处理器状态 (T 位用于 Thumb 指令集)。 |
CONTROL | 控制寄存器 | 控制处理器工作模式,如栈指针选择 (MSP/PSP) 和权限级别 (特权级/用户级)。 |
PRIMASK | 中断屏蔽寄存器 | 屏蔽所有可屏蔽中断,保证关键代码段不被中断打断。 |
BASEPRI | 基础优先级寄存器 | 设置中断优先级屏蔽阈值,低于该阈值的中断会被屏蔽。 |
FAULTMASK | 故障屏蔽寄存器 | 屏蔽所有异常,包括硬件故障,通常用于系统恢复或严重故障时。 |
分类记忆:
通用寄存器:R0-R12
R0-R3:用于数据传递、计算及函数参数传递;R0 也用于存储函数返回值。
R4-R12:用于存储局部变量,减少频繁的内存访问。
特殊功能寄存器:
R13(栈指针 SP):指向当前栈顶,管理栈操作。
R14(链接寄存器 LR):保存函数调用返回地址。
R15(程序计数器 PC):指向当前执行的指令地址,控制程序流程。
状态和控制寄存器:
xPSR(程序状态寄存器):包含条件标志和处理器状态。
CONTROL(控制寄存器):控制处理器工作模式。
PRIMASK、BASEPRI、FAULTMASK:用于中断和故障管理。
2.2 处理模式
stm32默认普通程序和中断程序都工作在特权级。
- 处理者模式
- 始终运行在特权级
- 线程模式
- 可以运行在特权级和非特权级,通过CONTROL寄存器控制。
2.3 流水线
-
概念
MCU的流水线,指的是在指令执行过程中将一条指令的不同阶段拆分成多个步骤,让这些步骤可以并行执行,从而提高指令吞吐量。 -
一个典型的 ARM 处理器指令流水线包括以下阶段:
- 取指(Fetch):从内存中获取指令。
- 译码(Decode):将指令翻译成处理器可以理解的操作。
- 执行(Execute):执行指令,如加法、乘法、位移等操作。
- 存储(Memory Access):如果需要,进行内存访问,读取或写入数据。
-
ARM 处理器的流水线可以有多个阶段,常见的有 3 级、5 级或 7 级流水线,甚至更深的流水线设计。
2.4 MMU
MMU定义:Arm MMU深度解读
-
ARM 处理器中的 MMU(Memory Management Unit,内存管理单元) 用于支持虚拟内存和内存保护。
-
它通过将虚拟地址转换为物理地址,并设置内存访问权限,确保操作系统和应用程序的内存安全。MMU 是多任务操作系统(如 Linux)运行的关键。
- 虚拟内存:MMU 支持将程序的地址空间映射到物理内存中,使得不同的任务可以使用不同的虚拟地址空间。
- 内存保护:通过 MMU,操作系统可以保护内存空间,防止进程间非法访问。
-
对于一些低端 ARM Cortex-M 系列(如 Cortex-M0),没有内置 MMU,而是使用 MPU(Memory Protection Unit) 进行简单的内存保护,而不支持完整的虚拟内存。
2.5 指令集
ARM 处理器的指令集架构基于 RISC 设计原则,使用精简指令集。常见的 ARM 指令集架构有:
- ARM 指令集:用于标准 32 位指令集的 ARM 处理器,支持更复杂的运算和操作。
- Thumb 指令集:是 ARM 的一种压缩指令集,指令长度为 16 位,旨在减少内存占用,适用于资源受限的嵌入式系统。Thumb 指令集的执行效率虽然略低,但通过减少代码大小提高了存储效率。
- Thumb-2 指令集:结合了 32 位 ARM 指令和 16 位 Thumb 指令,使得处理器能够在运行时动态切换不同指令集,提供更高的性能和代码密度。
2.6 中断
ARM 处理器具有复杂的中断和异常处理机制,其中NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器) 是 Cortex-M 系列中的重要模块,用于管理中断。
- 中断优先级:ARM Cortex-M 支持多级中断优先级,可以快速响应高优先级中断。
- 中断嵌套:允许高优先级中断在低优先级中断的处理中打断执行,实现中断的嵌套。
在发生中断时,处理器会自动保存必要的寄存器,并跳转到对应的中断服务程序 (ISR) 执行,处理完后恢复执行原程序。
中断现场保存
2.7 FPU
在一些高性能的 ARM Cortex-M 处理器(如 Cortex-M4、Cortex-M7)中,集成了硬件浮点运算单元 (FPU),用于加速浮点数的运算。这对于涉及大量数学计算的应用(如信号处理、图像处理)非常有用。
- 单精度浮点运算(FPU-S):支持 IEEE 754 标准的单精度浮点运算。
- 双精度浮点运算(FPU-D):更高端的处理器支持双精度浮点运算。
2.8 总线架构
冯·诺依曼结构,也称统一存储结构,ARM 处理器通过各种总线架构连接外设、存储器和其他模块,常见的总线架构包括:
- AHB (Advanced High-performance Bus):高性能总线,用于连接内存和高速外设。
- APB (Advanced Peripheral Bus):低速外设总线,用于连接定时器、串口、GPIO 等外设。
- AXI (Advanced eXtensible Interface):在高端 ARM 处理器中使用,支持高吞吐量和并发的外设访问。
回顾
- stm32有哪些通用寄存器
- stm32有哪些特殊功能寄存器
- stm32有哪些状态和控制寄存器
- 讲一下stm32的两种处理模式
- 为什么要用虚拟地址?为什么要用MMU?
- ARM常见的指令集架构有哪些
- 介绍一下NVIC
- 介绍一下stm32的总线架构