ARM Cortex-M3 技術解析:核寄存器R1-R15介紹及使用

ARM Cortex-M3 技術解析:核寄存器R1-R15介紹及使用

作為嵌入式開發領域的經典處理器內核,ARM Cortex-M3(CM3)憑借其高效能、低功耗和豐富特性,在工業控制、物聯網、消費電子等領域廣泛應用。而內核寄存器是我們調試代碼,理解程序運行邏輯必不可少的好幫手,理解匯編是通往嵌入式高手的必經之路。下面本文從技術角度解析其核心架構與核寄存器做相關講解。

一、內核介紹

ARM Cortex-M3是一款面向嵌入式系統的32位RISC處理器內核,采用改進型哈佛架構,通過獨立指令總線(I-Code)和數據總線(D-Code)實現并行訪問,同時維護統一編址的4GB線性存儲空間。內核配備三級流水線(取指、譯碼、執行)與靜態分支預測機制,結合Thumb-2指令集混合16/32位編碼,在保持高代碼密度(相比純32位指令節省約30%存儲空間)的同時實現單周期32位乘法等運算能力。其嵌套向量中斷控制器(NVIC)支持240個中斷源,硬件自動完成優先級排序與現場保護,中斷響應延遲固定為12個時鐘周期,中斷嵌套深度無軟件限制。

存儲器保護單元(MPU)可劃分8個獨立區域,實現特權模式與用戶模式的訪問權限隔離,支持大小端數據格式動態切換。調試系統集成串行線/JTAG(SWJ-DP)接口,支持4個硬件斷點與2個數據觀察點,配合可選ETM指令追蹤模塊實現實時執行流記錄。電源管理模塊提供睡眠、深度睡眠和待機三種低功耗模式,休眠電流最低1μA,運行功耗典型值低于200μA/MHz(基于90nm工藝)。該內核通過AHB-Lite總線矩陣連接外設,支持單周期GPIO操作與位帶別名訪問,硬件除法器可在2-12周期內完成32位整數運算。作為首款支持非對齊內存訪問的Cortex-M系列處理器,其架構平衡了實時性、能效比與開發便利性,適用于工控、IoT等實時嵌入式場景。image-20250222081336917

二、核寄存器

Cortex‐M3 處理器擁有 R0‐R15 的寄存器組。其中 R13 作為堆棧指針 SP。SP 有兩個,但在同一時刻只能有一個可以看到,這也就是所謂的“banked”寄存器。如下圖所示的R13寄存器,分為主堆棧指針(MSP)、進程堆棧寄指針(PSP)。

image-20250222080644783

R0-R12:通用寄存器

R0‐R12 都是 32 位通用寄存器,用于數據操作。但是注意:絕大多數 16 位 Thumb 指令只能訪問 R0‐R7,而 32 位 Thumb‐2 指令可以訪問所有寄存器。首先在程序的調用過程中,R0-R3寄存器都存儲著調用函數的傳參值,下一個函數用到了幾個參數,就提前將參數存儲在r0-r3里面,如果超出4個參數,就將多余的參數Push進堆棧中,在進入到調用的函數里面后,在Pop出棧給其他r4-r12寄存器。

下面我們舉個例子,函數我是用函數指針的形式寫的,你就把他當成調用一個函數,其中ptDevice,x,y,1都是傳參。我們看下面的匯編代碼,將1給到r3,將y給到r2,將x給到r1,最后將ptDevice給到r0,之后執行BLX跳轉指令,進入到該函數中。

image-20250222082843251

image-20250222083005770

Banked R13: 兩個堆棧指針

Cortex‐M3 擁有兩個堆棧指針,然而它們是 banked,因此任一時刻只能使用其中的一個。

  • 主堆棧指針(MSP):復位后缺省使用的堆棧指針,用于操作系統內核以及異常處理例程(包括中斷服務例程)
  • 進程堆棧指針(PSP):由用戶的應用程序代碼使用。

如下圖,在STM32 F103芯片中,我們能看到這兩個SP寄存器。之后我會單獨出一章講解MSP和PSP使用的場景,這里不做細講。

image-20250222083515384

堆棧指針的最低兩位永遠是 0,這意味著堆棧總是 4 字節對齊的。

在 ARM 編程領域中,凡是打斷程序順序執行的事件,都被稱為異常(exception)。除了外部中斷外,當有指令執行了“非法操作”,或者訪問被禁的內存區間,因各種錯誤產生的 fault,以及不可屏蔽中斷發生時,都會打斷程序的執行,這些情況統稱為異常。在不嚴格的上下文中,異常與中斷也可以混用。另外,程序代碼也可以主動請求進入異常狀態的(常用于系統調用)。

R14:連接寄存器(LR)

當呼叫一個子程序時,由 R14 存儲返回地址。

不像大多數其它處理器,ARM 為了減少訪問內存的次數(訪問內存的操作往往要 3 個以上指令周期,帶 MMU和 cache 的就更加不確定了),把返回地址直接存儲在寄存器中。這樣足以使很多只有 1 級子程序調用的代碼無需訪問內存(堆棧內存),從而提高了子程序調用的效率。如果多于 1 級,則需要把前一級的 R14 值壓到堆棧里。在 ARM上編程時,應盡量只使用寄存器保存中間結果,迫不得以時才訪問內存。在 RISC 處理器中,為了強調訪內操作越過了處理器的界線,并且帶來了對性能的不利影響,給它取了一個專業的術語:濺出。

下面我們也再看一個例子,如下圖所示,在我們調用函數的時候,會將函數執行完返回下一行指令存儲在R14寄存器中,當執行完該函數后,就跳轉回R14寄存器,即該函數執行完的下一行代碼。執行完該跳轉指令后的下一行指令的地址是0x08001CA6,此時將0x08001CA6的值存儲在R14寄存器中,等待函數執行完,返回。由于Cortex M使用的是Thumb指令,地址跳轉的指令需要加1,即08001CA7存儲在R14寄存器中。

image-20250222083944642

R15:程序計數寄存器–PC

指向當前的程序地址。如果修改它的值,就能改變程序的執行流。

其實就是程序跑到了哪里,R15就執行哪里,如下圖所示。

image-20250222084255528

特殊功能寄存器

Cortex‐M3 還在內核水平上搭載了若干特殊功能寄存器,包括程序狀態字寄存器組(PSRs)中斷屏蔽寄存器組(PRIMASK, FAULTMASK, BASEPRI)控制寄存器(CONTROL)

image-20250222081705516

image-20250222081716791

下圖我們介紹一下STM32 F103的特殊寄存器,當我們執行CMP,BLE,CBZ等等這些匯編代碼時,這些代碼執行完都會影響狀態寄存器xPSR中的值,給后續匯編代碼執行其他跳轉、比較或者其他匯編指令的時候提供條件判斷。

image-20250222084331337

image-20250222084342480

下面我們就用一張STM32F1xx系列的Cortex M3的芯片將上面的核寄存器的圖片進行總結:

image-20250222082211825

image-20250222082219195

image-20250222082228873

image-20250222090734765

三、總結

Cortex-M3通過架構級優化(哈佛總線、Thumb-2指令集)與系統級增強(MPU、NVIC),在性能與功耗之間實現平衡。其完善的調試生態(Keil MDK、IAR Embedded Workbench支持)進一步降低開發門檻,成為中高端嵌入式應用的經典選擇。后續的Cortex-M4/M7等系列雖在DSP/浮點性能上強化,但M3仍憑借性價比占據重要市場地位。后續我會分享更多有關嵌入式和ARM內核方面的知識,希望大家多多關注。


擴展閱讀建議

  • ARMv7-M架構手冊(了解指令集細節)
  • 《Cortex-M3權威指南》(Joseph Yiu著)
  • CMSIS標準庫應用(統一外設驅動接口)

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

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

相關文章

python unzip file

要在 Python 中解壓文件并顯示進度,我們需要在解壓過程中跟蹤文件的提取進度。由于 zipfile 模塊本身不直接支持進度顯示,我們可以通過手動計算并使用 tqdm 庫來顯示進度條。 安裝 tqdm 首先,確保你已經安裝了 tqdm 庫,用于顯示…

DeepSeek+Kimi生成高質量PPT

DeepSeek與Kimi生成PPT全流程解析 一、工具分工原理 DeepSeek核心作用:生成結構化PPT大綱(擅長邏輯構建與內容優化)Kimi核心作用:將文本轉換為視覺化PPT(提供模板庫與排版引擎) 二、操作步驟詳解 1. 通…

一文掌握python中正則表達式的各種使用

文章目錄 1. 正則表達式基礎1.1 常用元字符1.2 基本用法 2. 正則表達式高級功能2.1 分組捕獲2.2 命名分組2.3 非貪婪匹配2.4 零寬斷言2.5 編譯正則表達式2.6 轉義字符 3. 常見應用場景3.1 驗證郵箱格式3.2 提取 URL3.3 提取日期3.4 提取HTML中的鏈接3.5 提取HTML中的圖片鏈接3.…

TCP,http,WebSocket

TCP(Transmission Control Protocol,傳輸控制協議)和HTTP(HyperText Transfer Protocol,超文本傳輸協議)都是網絡通信中的重要協議,但它們在網絡協議棧的不同層次上工作,各自負責不同…

Redis|持久化

文章目錄 總體介紹RDB(Redis DataBase)官網介紹案例演示優勢劣勢如何檢查修復 dump.rdb 文件哪些情況下會觸發 RDB 快照如何禁用快照RDB 優化配置項詳解小總結 AOF(Append Only File)官網介紹是什么能干嘛AOF 持久化工作流程AOF 緩…

Docker小游戲 | 使用Docker部署star-battle太空飛船射擊小游戲

Docker小游戲 | 使用Docker部署star-battle太空飛船射擊小游戲 前言項目介紹項目簡介項目預覽二、系統要求環境要求環境檢查Docker版本檢查檢查操作系統版本三、部署star-battle網頁小游戲下載鏡像創建容器檢查容器狀態檢查服務端口安全設置四、訪問star-battle網頁小游戲五、總…

巨控科技的GRM550元出魔抗實現PLC遠程下載與維護方案:工業自動化的高效解決方案

巨控科技PLC遠程下載與維護方案:工業自動化的高效解決方案 在工業自動化領域,設備的高效維護與快速調試是保障生產連續性的關鍵。巨控科技推出的PLC遠程下載與維護方案,憑借其先進的技術和廣泛兼容性,成為企業實現設備遠程管理的…

ChatGLM2-6B如何從輸入到輸出-代碼解析(二)

出發點 上一篇解析了Chatglm2-6b的模型架構,并和Chatglm-6b進行對比,但是留下了幾個問題(哭)這一篇的目的是講明白attention和rotaryEmbedding,解決問題,并實現整體目標,完全替代modeling_chat…

Sublime Text4安裝、漢化

-------------2025-02-22可用---------------------- 官方網址下載:https://www.sublimetext.com 打開https://hexed.it 點擊打開文件找到軟件安裝目錄下的 ctrlf 查找 8079 0500 0f94 c2右邊啟用替換替換為:c641 0501 b200 90點擊替換按鈕 替換完成后 另存為本地…

汽車開放系統架構(AUTOSAR)中運行時環境(RTE)生成過程剖析

一、引言 在當今高度智能化的汽車電子領域,軟件系統的復雜性呈指數級增長。為了應對這一挑戰,汽車開放系統架構(AUTOSAR)應運而生,它為汽車電子軟件開發提供了標準化的分層架構和開發方法。其中,運行時環境…

基于MATLAB的OFDM通信系統仿真設計

下面將為你詳細介紹基于MATLAB的OFDM通信系統仿真設計的步驟和示例代碼。 1. OFDM系統原理概述 正交頻分復用(OFDM)是一種多載波調制技術,它將高速數據流通過串并轉換,分配到多個正交的子載波上進行傳輸,這樣可以有效…

stm32仿真 74hc238流水燈 數碼管動態數字顯示

f103c6t6a_hex文件 #include "main.h"![請添加圖片描述](https://i-blog.csdnimg.cn/direct/8c0d44b121134cf08f5186df316ea07f.gif)#include "stdlib.h"void SystemClock_Config(void); static void MX_GPIO_Init(void); // 自定義abc引腳 #define A_PIN…

結構型模式 - 代理模式 (Proxy Pattern)

結構型模式 - 代理模式 (Proxy Pattern) 代理模式是一種結構型設計模式,它允許通過代理對象來控制對另一個對象(目標對象)的訪問。代理對象充當目標對象的接口,客戶端通過代理對象間接訪問目標對象。 分為兩大類 靜態代理&#…

網絡層(IP)

基本概念 子網和局域網是一個概念主機: 配有 IP 地址, 也能進行路由控制的設備;路由器: 即配有 IP 地址, 又能進行路由控制;節點: 路由器和主機的統稱。 背景 兩主機并不是直接連接的,路徑選擇問題?為什么? 由網絡層&#xff08…

JMeter性能問題

性能測試中TPS上不去的幾種原因 性能測試中TPS上不去的幾種原因_tps一直上不去-CSDN博客 網絡帶寬 連接池 垃圾回收機制 壓測腳本 通信連接機制 數據庫配置 硬件資源 壓測機 業務邏輯 系統架構 CPU過高什么原因 性能問題分析-CPU偏高 - 西瓜汁拌面 - 博客園 US C…

創建型模式 - 建造者模式 (Builder Pattern)

創建型模式 - 建造者模式 (Builder Pattern) 建造者模式是一種創建型設計模式,它將一個復雜對象的構建與表示分離,使得同樣的構建過程可以創建不同的表示。 需求描述 在游戲開發中,創建一個復雜的游戲角色,角色具有多種屬性&…

代碼隨想錄第二十天|二叉樹part08--669.修建二叉搜索樹、108.將有序數組轉換為二叉搜索樹、538.把二叉搜索樹轉換為累加樹

刷題小記: 上期學習了二叉搜索樹的插入和刪除操作,這次學習如何按區間修剪二叉搜索樹。還有兩題,關于借助二叉搜索樹的有序特性進行轉換。 669.修剪二叉搜索樹(669.修剪二叉搜索樹) 題目分析: 給定一個…

Fisher信息矩陣(Fisher Information Matrix,簡稱FIM)

Fisher信息矩陣簡介 Fisher信息矩陣(Fisher Information Matrix,簡稱FIM)是統計學和信息理論中的一個重要概念,廣泛應用于參數估計、統計推斷和機器學習領域。它以統計學家羅納德費希爾(Ronald Fisher)的名…

【初階數據結構】鏈表的柔光之美

目錄 一、為什么需要鏈表? 二、鏈表與數組的對比 三、鏈表節點定義 四、鏈表基本操作 1. 創建鏈表 2. 插入節點 頭插法(時間復雜度O(1)) 尾插法(時間復雜度O(n)) 3. 刪除節點 4. 遍歷鏈表 五、進階操作 1. 反…

《論湖倉一體架構及其應用》審題技巧 - 系統架構設計師

軟考論文寫作框架 一、考點概述 “湖倉一體架構及其應用”這一論題,主要考察了考生對現代數據管理系統中湖倉一體架構的理解、應用及問題解決能力。隨著5G、大數據、人工智能、物聯網等技術的快速發展,企業數據的管理需求正發生深刻變化。傳統的數據管…