不知你在DEBUG程序,又或者閱讀操作系統源碼時候有沒細心觀察,從一個普通子函數返回與異常(中斷)返回的匯編指令都是BX LR,但是這兩者的意義是一樣的嗎?這篇文章就來揭開LR寄存器的神秘面紗。
當單片機涉及函數跳轉或者任務調度的時候,理解MCU如何處理堆棧與改變各個通用寄存器的狀態尤為重要,下面就來比較一下在不同情況下LR寄存器的意義。
上圖是一個簡單的例子,當仿真點擊“下一步”的時候,MCU就會執行BX LR指令,并且從aa子函數返回到main函數中,可以看到在普通子函數里執行BX LR的意義是“跳轉到LR寄存器里的地址執行”。
對比一下一段ucos的源碼,如果對M3內核有所了解的小伙伴一定知道堆棧為什么是這樣定義的,那么這時候我們發現OS_TaskReturn是作為一個錯誤返回函數,并且賦值到堆棧中R14(LR)相應的位置。
任務調度函數會將PSP堆棧指針指向我們定義自定義的堆棧,然后最后一句匯編是BX LR,那么按照普通子函數執行BX LR的意義,這個時候MCU是會運行OS_TaskReturn這個函數嗎?這樣不就進入錯誤函數了嗎?
其實不然,因為用M系列實現ucos的任務調度是在PendSV異常(中斷)里面實現的,而在異常(中斷)里的LR寄存器不再是普通函數里面“返回地址”的意義,而是一個定義為一個稱作exc-return的值,當執行BX LR時候,這個值決定了MCU退出異常(中斷)之后的運行等級是在特權級還是用戶級以及用的堆棧是MSP還是PSP,而MCU即將要執行的是從PSP堆棧中POP出來的p_task函數,而不是OS_TaskReturn函數。
是不是覺得很有趣,蠢蠢欲動,迫不及待想上手體驗一下呢?考慮到廣大群眾的焦慮,我司提供 LPC824仿真套餐服務,不用998,也不用99,只要49,你還在想什么呢?趕緊復制下面的淘口令打開淘寶上車吧
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
相關推薦
今天我們來揭開Air780E 軟件中 C 語言內存數組的神秘面紗,希望有所收獲。
發表于 11-17 10:00
?305次閱讀
電子發燒友網站提供《用智能DAC揭開醫療報警設計的神秘面紗.pdf》資料免費下載
發表于 09-14 10:50
?0次下載
在計算機科學中,寄存器(Register)是一種高速存儲單元,它位于CPU內部,與CPU的運算單元和邏輯控制單元緊密相連。寄存器的主要作用是暫時存儲指令、操作數和地址等臨時數據,以便CPU快速訪問和處理。由于
發表于 09-05 14:11
?2511次閱讀
在計算機科學中,寄存器(Register)是一個高速存儲單元,它位于中央處理器(CPU)內部,用于存儲計算機程序執行過程中所需要的數據、指令地址或狀態信息。寄存器是計算機體系結構中至關
發表于 08-02 18:23
?4794次閱讀
移位寄存器是計算機中常用的一種寄存器類型,它能夠按位進行數據的左移或右移操作。作為數字電路中的基本元件,移位寄存器由多個觸發器構成,每個觸發
發表于 08-02 18:11
?3573次閱讀
,這些時間信息又是從哪里來的呢?為什么我們可以隨時隨地都能獲取準確的時間信息?這得益于高精度的 授時服務 ,今天我們就來揭開“授時”的神秘面紗。 ? ? ?大家都知道我國的北斗導航衛星,是用于定位導航的。那么北斗是怎么進行定位導
發表于 07-25 16:21
?504次閱讀
。 一、寄存器尋址 寄存器尋址的定義 寄存器尋址是一種將操作數直接存儲在CPU內部寄存器中的尋址
發表于 07-12 10:42
?2368次閱讀
在計算機體系結構中,寄存器尋址是一種常見的尋址方式,它允許程序直接訪問CPU內部的寄存器。寄存器尋址可以提高程序的執行效率,因為它避免了對內存的訪問。
發表于 07-12 10:36
?819次閱讀
寄存器是計算機中用于存儲數據的高速存儲單元,它們是CPU內部的重要組成部分。寄存器可以分為基本寄存器和擴展寄存器兩種類型。 一、基本
發表于 07-12 10:31
?1606次閱讀
在科技界的浩瀚星空中,埃隆·馬斯克的每一次發聲都如同璀璨的新星,瞬間照亮前行的道路。近日,這位科技巨擘在推特上的一則簡短宣告,再次將全球的目光聚焦于人工智能的前沿陣地——他的初創公司xAI即將在八月揭開其最新力作Grok-2大語
發表于 07-02 11:38
?532次閱讀
創新成果具有挽救生命、改變生活和創造夢想的能力。現在讓我們一起緊隨Pluto產品發布會的步伐,揭開PlutoXZU20的神秘面紗,與我們一起
發表于 06-21 08:09
?438次閱讀
內核寄存器與外設寄存器: 內核寄存器與外設寄存器是完全不同的概念。內核寄存器是指 CPU 內部的寄存器
發表于 04-17 11:47
?4249次閱讀
UFP芯片是一種用于USB快充技術的關鍵元件,它在移動設備和充電器之間進行通信和協調,以實現高效、安全、快速的充電過程。下面我們將揭開快充芯片的神秘面紗,深入探討UFP快充芯片的工作原
發表于 04-15 12:51
?709次閱讀
無論是FPGA還是ASIC,系統設計中總會存在配置寄存器總線的使用,我們會將各種功能、調試寄存器掛載在寄存器總線上使用。
發表于 03-04 13:56
?1238次閱讀
CPU寄存器是中央處理器內的組成部分,是有限存貯容量的高速存貯部件。寄存器是CPU內部的元件,包括通用寄存器、專用寄存器和控制
發表于 02-03 15:15
?4736次閱讀
評論