STM32八股【2】-----ARM架構

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73498.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73498.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73498.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

effective Java 學習筆記(第二彈)

effective Java 學習筆記(第一彈) 整理自《effective Java 中文第3版》 本篇筆記整理第3,4章的內容。 重寫equals方法需要注意的地方 自反性:對于任何非空引用 x,x.equals(x) 必須返回 true。對稱性:對于…

mac命令行快捷鍵

光標移動 Ctrl A: 將光標移動到行首。Ctrl E: 將光標移動到行尾。Option 左箭頭: 向左移動一個單詞。Option 右箭頭: 向右移動一個單詞。 刪除和修改 Ctrl K: 刪除從光標到行尾的所有內容。Ctrl U: 刪除從光標到行首的所有內容。Ctrl W: 刪除光標前的一個單詞。Ctrl …

CentOS 7部署主域名服務器 DNS

1. 安裝 BIND 服務和工具 yum install -y bind bind-utils 2. 配置 BIND 服務 vim /etc/named.conf 修改以下配置項: listen-on port 53 { any; }; # 監聽所有接口allow-query { any; }; # 允許所有設備查詢 3 . 添加你的域名區域配置 …

優化 SQL 語句方向和提升性能技巧

優化 SQL 語句是提升 MySQL 性能的關鍵步驟之一。通過優化 SQL 語句,可以減少查詢時間、降低服務器負載、提高系統吞吐量。以下是優化 SQL 語句的方法、策略和技巧: 一、優化 SQL 語句的方法 1. 使用 EXPLAIN 分析查詢 作用:查看 SQL 語句的執行計劃,了解查詢是如何執行的…

C++ 多線程簡要講解

std::thread是 C11 標準庫中用于多線程編程的核心類,提供線程的創建、管理和同步功能。下面我們一一講解。 一.構造函數 官網的構造函數如下: 1.默認構造函數和線程創建 thread() noexcept; 作用:創建一個 std::thread 對象,但…

Vscode HTML5新增元素及屬性

一、?HTML5 語義化標簽 HTML5 語義化標簽&#xff08;Semantic Elements&#xff09;是一組 ?具有明確含義的 HTML 元素?&#xff0c;通過標簽名稱直接描述其內容或結構的功能&#xff0c;而非僅作為樣式容器&#xff08;如 <div> 或 <span>&#xff09;。它們旨…

【PostgreSQL教程】PostgreSQL 特別篇之 語言接口Python

博主介紹:?全網粉絲22W+,CSDN博客專家、Java領域優質創作者,掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域? 技術范圍:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大數據、物聯網、機器學習等設計與開發。 感興趣的可…

Three學習入門(四)

9-Three.js 貼圖與材質學習指南 環境準備 <!DOCTYPE html> <html> <head><title>Three.js Texture Demo</title><style> body { margin: 0; } </style> </head> <body><script src"https://cdnjs.cloudflare.…

前端NVM安裝

https://v0.dev/chat/settings 本地啟動環境 1安裝 nvm 2安裝node nvm install v18.19.0 nvm install v20.9.0 nvm use 18 node -v 3安裝 pnpm npm install -g pnpm 或者 npm i -g pnpm 4啟動 代碼 目錄下 執行 pnpm i pnpm run dev 4.1到代碼目錄下 4.2直接cmd…

藍橋杯算法精講:二分查找實戰與變種解析

適合人群&#xff1a;藍橋杯備考生 | 算法競賽入門者 | 二分查找進階學習者 目錄 一、二分查找核心要點 1. 算法思想 2. 適用條件 3. 算法模板 二、藍橋杯真題實戰 例題&#xff1a;分巧克力&#xff08;藍橋杯2017省賽&#xff09; 三、二分查找變種與技巧 1. 查找左邊…

cmd命令查看電腦的CPU、內存、存儲量

目錄 獲取計算機硬件的相關信息的命令分別的功能結果展示結果說明獲取計算機硬件的相關信息的命令 wmic cpu get name wmic memorychip get capacity wmic diskdrive get model,size,mediaType分別的功能 獲取計算機中央處理器(CPU)的名稱 獲取計算機內存(RAM)芯片的容量…

SCI論文閱讀指令(特征工程)

下面是一個SCI論文閱讀特征工程V3.0&#xff0c;把指令輸入大模型中&#xff0c;并上傳PDF論文&#xff0c;就可以幫你快速閱讀論文。 優先推薦kimi&#xff0c;當然DeepSeek、QwQ-32B等大語言模型也可以。測試了一下總結的還不錯&#xff0c;很詳細。 請仔細并深入地閱讀所提…

如何監控 SQL Server

監控 SQL Server 對于維護數據庫性能、確保數據可用性和最大限度地減少停機時間至關重要。隨著企業越來越依賴數據驅動的決策&#xff0c;高效的SQL Server監控策略能顯著提升組織生產力和用戶滿意度。 為什么要監控 SQL Server SQL Server 是許多關鍵應用程序的支柱&#xf…

python腳本處理excel文件

1.對比perl和python 分別嘗試用perl和python處理excel文件&#xff0c;發現perl的比較復雜&#xff0c;比如說read excel就有很多方式 Spreadsheet::Read use Spreadsheet::ParseExcel 不同的method&#xff0c;對應的取sheet的cell方式也不一樣。更復雜的是處理含有中文內…

3、pytest實現參數化

在 pytest 中&#xff0c;參數化&#xff08;parametrization&#xff09;是一種強大的功能&#xff0c;可以讓你用不同的輸入數據重復執行同一個測試函數。這種功能非常有用&#xff0c;可以幫助你顯著減少重復代碼并提高測試覆蓋率。 參數化的主要作用是&#xff1a; 測試多…

Cursor:超強AI變成神器

是一個強大的 AI 編程助手&#xff0c;可以幫助開發者快速地編寫、編輯和討論代碼&#xff0c;支持 Python、Java、C# 等多種編程語言&#xff0c;并且可以與 GitHub、Slack 等平臺集成。 Cursor 是什么&#xff1f; 想象一下&#xff0c;你有一個能把你的創意變成現實的造夢 …

畫秒殺系統流程圖

秒殺系統流程圖 秒殺系統關鍵點 高并發處理: 使用網關&#xff08;如 Nginx&#xff09;進行流量限流&#xff0c;避免過載。分布式鎖或 Redis 原子操作控制并發。 活動狀態檢查: Redis 存儲活動狀態&#xff08;如 seckill:activity:1:status&#xff09;&#xff0c;快速…

【js逆向入門】圖靈爬蟲練習平臺 第九題

地址&#xff1a;aHR0cHM6Ly9zdHUudHVsaW5ncHl0b24uY24vcHJvYmxlbS1kZXRhaWwvOS8 f12進入了debugger&#xff0c;右擊選擇一律不在此處暫停&#xff0c; 點擊繼續執行 查看請求信息 查看載荷&#xff0c;2個加密參數&#xff0c;m和tt 查看啟動器&#xff0c;打上斷點 進來 往…

Vue中的狀態管理器Vuex被Pinia所替代-上手使用指南

Pinia.js 是新一代的狀態管理器&#xff0c;由 Vue.js團隊中成員所開發的&#xff0c;因此也被認為是下一代的 Vuex&#xff0c;即 Vuex5.x&#xff0c;在 Vue3.0 的項目中使用也是備受推崇 Pinia.js 有如下特點&#xff1a; 完整的 typescript 的支持&#xff1b;足夠輕量&…

向量數據庫學習筆記(1) —— 基礎概念

一、 嵌入模型 Embedding Models 嵌入模型是將復雜數據&#xff08;如文本、圖像、音頻等&#xff09;轉換為向量表示的機器學習模型 1. 核心概念 嵌入(Embedding)&#xff1a;將高維、非結構化的數據映射到低維、稠密的向量空間 向量表示&#xff1a;輸出固定長度的數值向量…