嵌入式八股ARM篇

前言

??ARM篇主要介紹一下寄存器和中斷機制,至于匯編這一塊…還請大家感興趣自行學習

1.寄存器

  1. R0 - R3 R4 - R11 寄存器
    R0 - R3一般用作函數傳參
    R4 - R11用來保存程序運算的中間結果或函數的局部變量
    在函數調用過程中
  • 注意在發生異常的時候 cortex-M0架構會自動將R0-R3壓入棧中, 這也是為什么我們的PendSV只用壓入R4 - R11
  1. R12 沒啥用

  2. R13寄存器
    R13寄存器又叫做堆棧指針寄存器SP 總是指向當前正在運行的函數的棧幀

    • MSP 和 PSP
      對于 cortex-M3架構 存在兩個SP 指針 一個 MSP 一個 PSP
      在這里插入圖片描述

      • PSP只能被用作線程模式 MSP可以在 線程/handler模式運行
        具體的等后面模式做詳解
    • FP 與 SP
      ??前面將函數調用過程的時候講到了 棧幀是靠這倆寄存器FP和SP維護的 可是為啥沒見FP寄存器呢? FP似乎通常是R11寄存器 但不絕對

  3. R14寄存器—LR寄存器

    • 用來保存保存上一級函數調用者的返回地址,這樣當我們函數調用返回的時候就知道從哪里接著運行了
    • 當異常發生時,LR中保存的值等于異常發生時PC的值減4(或者減2),因此在各種異常模式下可以根據LR的值返回到異常發生前的相應位置繼續執行
    • 當中斷發生的時候,LR寄存器的值會被設定為"EXC_RETURN"
    • BL function
      當我們通過這樣的指令跳轉的時候 就會更新我們的LR寄存器的值了
    • BX LR
      這個我們在RTOS的PendSV函數的最后會看到 BX LR 指令 這是因為PendSV結束調用時還處于特權模式(LR = EXC_RETURN),而我們實際上是想返回線程模式的 所以用BX LR 而不是 MOV PC, LR
  4. R15寄存器—PC寄存器
    每取一次指令,PC的值會自動 + 8

  5. 各種狀態寄存器
    不必關心

  6. ARM的三級流水線
    ??一條指令的執行分為三步:取址, 譯碼 和 執行 每一條都需要一個時鐘周期 所以一條指令需要三個時鐘周期。 那如果我們只有第一條指令執行完才執行第二條 就意味著取址單元會有兩個時鐘周期啥也不干
    所以引入流水線就好了
    在這里插入圖片描述

    • 為什么是PC = PC + 8 呢
      這么理解
      “正在取值的指令” = “正在執行的指令” + 8 *
      就對了,反正這也是給你看的不是給機器看的…
      可以看到對于第一條指令add r0,r1,#5真正執行的時候,我們取的是第三條指令cmp r2,#3的值
      在這里插入圖片描述
  7. 順序執行與亂序執行
    因為我們的指令很有可能下個指令依賴上個指令的結果,那此時三級流水線就出問題了
    比如上個指令的結果還沒放回內存了 這邊已經從內存開始取數據了
    此時就得加入空指令 暫停流水線了–效率低下
    所以就會有亂序執行–有專門邏輯電路進行分析做這個事

2.特權與模式

  1. cortex-M3的模式
    兩種模式 – handler模式與線程模式
    兩種特權 – 用戶級和特權級
  2. ARM的七種模式
    • 用戶模式(User):這是唯一的非特權模式,
    • 快速中斷模式(FIQ, Fast Interrupt Request):
    • 標準中斷模式(IRQ, Interrupt Request)
    • 管理模式(SVC, Supervisor)。
    • 中止模式(Abort)
    • 未定義模式(Undefined)
    • 系統模式(System)
      在這里插入圖片描述

??用戶級和特權級是針對訪問權限:特權級訪問寄存器不受限,用戶級不行
??模式是針對運行狀態: 觸發異常了就得進入 handler模式 普通狀態就是線程模式
??所以不能在用戶級去操作handler模式,但是線程模式下特權級還是用戶級都無所謂啦

  1. 復位后的狀態
    復位后,處理器默認進入線程模式(MSP),特權極訪問
    可以通過修改CTRL寄存器回到線程模式(PSP指針)
    但是線程模式可就不能修改CTRL寄存器了—那想回去怎么辦?觸發異常再異常中修該
    在這里插入圖片描述

3.存儲區映射

對于32位的處理器 地址空間是4個G 這4G對于ARM來說是這么定義的
在這里插入圖片描述

異常

??對于所有的異常都進行了編號 前15種是系統異常 后面的都是外部中斷
在這里插入圖片描述

??我們可以看到對于后面幾個異常是可編程的,這個在RTOS的任務切換很重要,我們一般會把PendSV這個異常設定為最低優先級(0xffffffff)—為了在對所有中斷都響應后在切換任務

  • 搶占優先級和響應優先級
    高搶占優先級可以打斷低搶占優先級
    但是同搶占優先級下,高響應優先級打斷不了低的響應優先級

  • 中斷向量表—處理中斷的關鍵
    在這里插入圖片描述

    這個是在starup.s中定義的 一般我們也不會有重新定義新的中斷的需求

  • 對中斷的響應
    正常來說需要我們在中斷服務程序清除對應的標志位
    在這里插入圖片描述

    如果不清除會咋樣—那就反復進入該中斷處理程序操作
    在這里插入圖片描述

    如果極短時間多次請求–一般只會響應一次,因為中斷就懸起了一次
    在這里插入圖片描述

    假如在中斷服務函數執行過程中,又觸發了一次相同的中斷–就會再執行一次

  • NVIC中斷控制器

    • 中斷的懸起與解懸
    • 中斷的優先級控制
    • 對中斷響應的暫時屏蔽

中斷

  • msp與psp指針
    MSP:復位后缺省使用的堆棧指針,用于操作系統內核以及異常處理例程(包括中斷服務例程)
    PSP:由用戶的應用程序代碼使用。
    兩個堆棧指針,同一時刻只能用一個。
    作用:提升程序健壯性。一定程度上保證應用的數據(棧)空間不會溢出到操作系統數據(棧)空間
  • 中斷發生后做了什么
    當一個中斷發生的時候 我們的內核到底做了什么
    • 寄存器入棧–保存現場
      在這里插入圖片描述

    • 地址總線從向量表查詢中斷向量

    • 更新寄存器–此時就進入handler模式了同時使用的也是MSP指針了
      在這里插入圖片描述

      在這里插入圖片描述

    • 跳轉執行中斷服務程序

    • 中斷返回–包括把之前保存的寄存器的值自動彈出來(恢復現場)

  • 中斷的遞歸調用
    不用我等操心 但是需要我們注意的是就是給棧提供一個合適的大小
  • 中斷與異常的區別
    中斷——外部事件引起,正在運行的程序所不期望的–異步的
    異常——內部執行指令引起–同步的
    在這里插入圖片描述

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

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

相關文章

Python 實現的采集諸葛靈簽

Python 實現的采集諸葛靈簽 項目介紹 這是一個基于 Python 開發的諸葛靈簽數據采集和展示項目。通過爬蟲技術獲取諸葛神簽的簽文和解簽內容,并提供數據存儲和查詢功能。 項目結構 zhuge/├── zhuge_scraper.py # 爬蟲主程序├── zhuge_pages/ # 數據存儲目錄…

【C++項目實戰】校園公告搜索引擎:完整實現與優化指南

🎬 個人主頁:誰在夜里看海. 📖 個人專欄:《C系列》《Linux系列》《算法系列》 ?? 道阻且長,行則將至 目錄 📚一、項目概述 📖1.項目背景 📖2.主要功能 📖3.界面展…

代理(Delegate)、閉包(Closure)、Notification(通知中心) 和 swift_event_bus適用場景和工作方式

在 Swift 開發中,在 Swift 開發中,代理(Delegate)、閉包(Closure)、Notification(通知中心) 和 swift_event_bus 主要用于 組件之間的通信,但它們的適用場景和工作方式有…

設計模式--單例模式(Singleton)【Go】

引言 在設計模式中,單例模式(Singleton Pattern)是一種非常常見且實用的模式。它的核心思想是確保一個類只有一個實例,并提供一個全局訪問點。這種模式在需要全局唯一對象的場景中非常有用,比如配置管理、日志記錄、數…

MySQL數據庫復制

文章目錄 MySQL數據庫復制一、復制的原理二、復制的搭建1.編輯配置文件2.在主庫上創建復制的用戶3.獲取主庫的備份4.基于從庫的恢復5.建立主從復制6.開啟主從復制7.查看主從復制狀態 MySQL數據庫復制 MySQL作為非常流行的數據庫,支撐它如此出彩的因素主要有兩個&am…

Sourcetree——使用.gitignore忽略文件或者文件夾

一、為何需要文件忽略機制? 1.1 為什么要會略? 對于開發者而言,明智地選擇忽略某些文件類型,能帶來三大核心優勢: 倉庫純凈性:避免二進制文件、編譯產物等污染代碼庫 安全防護:防止敏感信息&…

基于yolov8+streamlit實現目標檢測系統帶漂亮登錄界面

【項目介紹】 基于YOLOv8和Streamlit實現的目標檢測系統,結合了YOLOv8先進的目標檢測能力與Streamlit快速構建交互式Web應用的優勢,為用戶提供了一個功能強大且操作簡便的目標檢測平臺。該系統不僅具備高精度的目標檢測功能,還擁有一個漂亮且…

分享vue好用的pdf 工具實測

vue3-pdf-app: 帶大綱,帶分頁,帶縮放,帶全屏,帶打印,帶下載,帶旋轉 下載依賴: yarn add vue3-pdf-appornpm install vue3-pdf-app 配置類: 創建文件 pdfConfig.ts /…

基于微信小程序開發的寵物領養平臺——代碼解讀

項目前端 一、項目的技術架構概況 一句話概括:該項目是基于微信小程序開發的寵物領養平臺,采用原生小程序框架進行用戶界面的構建,使用 wx.request 進行 API 請求,并通過 getApp() 和本地存儲來管理全局狀態和用戶信息。 一&am…

最完美的WPF無邊框設計!

常規的無邊框方法設計 常規的WPF無邊框設計方法都是通過AllowsTransparency="True"和WindowStyle=“None”,并且使用WindowChrome樣式來實現,但是這樣會有問題就是,窗體最大化的時候將底部任務欄給擋住了,另外最大化的時候不能拖動窗體。參考這個大佬的設計@ 若…

【區塊鏈】btc

學習視頻源鏈接: https://www.bilibili.com/video/BV1Vt411X7JF/ 本文是根據肖老師的視頻進行的筆記記錄 一、 cryptographic hash function 1.1. collision resistance抗碰撞性 : collision 指的是hash碰撞 抗碰撞性 (Collision Resistance) 是密碼…

C語言【數據結構】:時間復雜度和空間復雜度.詳解

引言 詳細介紹什么是時間復雜度和空間復雜度。 前言:為什么要學習時間復雜度和空間復雜度 算法在編寫成可執行程序后,運行時需要耗費時間資源和空間(內存)資源。因此衡量一個算法的好壞,一般是從時間和空間兩個維度來衡量的,即時…

QT:文件讀取

問題: 在文件讀取,判斷md5值時,遇到py文件讀取轉String后,再轉byte,md5前后不一致問題。 解決方法: python文件讀取要使用QTextStream,避免\t 、\r、\n的換行符跨平臺問題(window…

32單片機——LED

LED原理圖如圖所示: 代碼 DS0和DS1每過500ms一次交替閃爍,實現類似跑馬燈的效果 GPIO輸出配置步驟 (1)使能對應GPIO時鐘 STM32在使用任何外設之前,我們都要先使能其時鐘(下同)。本實驗用到…

貪心算法和遺傳算法優劣對比——c#

項目背景:某鋼管廠的鋼筋原材料為 55米,工作需要需切割 40 米(1段)、11 米(15 段)等 4 種規格 ,現用貪心算法和遺傳算法兩種算法進行計算: 第一局:{ 40, 1 }, { 11, 15…

【Java篇】一法不變,萬象歸一:方法封裝與遞歸的思想之道

文章目錄 Java 方法的使用:從基礎到遞歸的全面解析一、方法的概念及使用1.1 什么是方法 (method)?1.2 方法定義1.3 方法調用的執行過程1.4 實參和形參的關系1.5 沒有返回值的方法 二、方法重載2.1 為什么需要方法重載2.2 方法重載的概念2.2.4 C 和 Java 的比較&…

深入理解 HTML 中的<div>和元素:構建網頁結構與樣式的基石

一、引言 在 HTML 的世界里&#xff0c;<div>和元素雖看似普通&#xff0c;卻扮演著極為關鍵的角色。它們就像網頁搭建過程中的萬能積木&#xff0c;能夠將各種 HTML 元素巧妙地組合起來&#xff0c;無論是構建頁面布局&#xff0c;還是對局部內容進行樣式調整&#xff…

《大語言模型》學習筆記(一)

一、什么是大語言模型 大語言模型是指在海量無標注文本數據上進行預訓練得到的大型預訓練語言模型&#xff0c;例如GPT-3&#xff0c;PaLM和LLaMA。大語言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;是一種基于深度學習的自然語言處理模型&#xff0c;能…

電力行業中分布式能源管理(Distributed Energy Management System, DEMS)的實現

以下是電力行業中分布式能源管理(Distributed Energy Management System, DEMS)的實現方案,涵蓋系統架構、關鍵技術、核心功能及實施路徑,結合典型場景與代碼示例: 一、系統架構設計 采用云-邊-端三層架構,實現分布式能源的高效協同管理: 1. 終端層(感知層) 設備組…

實驗5 邏輯回歸

實驗5 邏輯回歸 【實驗目的】掌握邏輯回歸算法 【實驗內容】處理樣本&#xff0c;使用邏輯回歸算法進行參數估計&#xff0c;并畫出分類邊界 【實驗要求】寫明實驗步驟&#xff0c;必要時補充截圖 1、參照“2.1梯度下降法實現線性邏輯回歸.ipynb”和“2.2 sklearn實現線性邏輯…