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的總線架構