0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

與你一起揭開LR寄存器的神秘面紗

UtFs_Zlgmcu7890 ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2017-10-31 06:35 ? 次閱讀

不知你在DEBUG程序,又或者閱讀操作系統(tǒng)源碼時候有沒細心觀察,從一個普通子函數(shù)返回與異常(中斷)返回的匯編指令都是BX LR,但是這兩者的意義是一樣的嗎?這篇文章就來揭開LR寄存器的神秘面紗。

單片機涉及函數(shù)跳轉(zhuǎn)或者任務調(diào)度的時候,理解MCU如何處理堆棧與改變各個通用寄存器的狀態(tài)尤為重要,下面就來比較一下在不同情況下LR寄存器的意義。

上圖是一個簡單的例子,當仿真點擊“下一步”的時候,MCU就會執(zhí)行BX LR指令,并且從aa子函數(shù)返回到main函數(shù)中,可以看到在普通子函數(shù)里執(zhí)行BX LR的意義是“跳轉(zhuǎn)到LR寄存器里的地址執(zhí)行”。

對比一下一段ucos的源碼,如果對M3內(nèi)核有所了解的小伙伴一定知道堆棧為什么是這樣定義的,那么這時候我們發(fā)現(xiàn)OS_TaskReturn是作為一個錯誤返回函數(shù),并且賦值到堆棧中R14(LR)相應的位置。

任務調(diào)度函數(shù)會將PSP堆棧指針指向我們定義自定義的堆棧,然后最后一句匯編是BX LR,那么按照普通子函數(shù)執(zhí)行BX LR的意義,這個時候MCU是會運行OS_TaskReturn這個函數(shù)嗎?這樣不就進入錯誤函數(shù)了嗎?

其實不然,因為用M系列實現(xiàn)ucos的任務調(diào)度是在PendSV異常(中斷)里面實現(xiàn)的,而在異常(中斷)里的LR寄存器不再是普通函數(shù)里面“返回地址”的意義,而是一個定義為一個稱作exc-return的值,當執(zhí)行BX LR時候,這個值決定了MCU退出異常(中斷)之后的運行等級是在特權(quán)級還是用戶級以及用的堆棧是MSP還是PSP,而MCU即將要執(zhí)行的是從PSP堆棧中POP出來的p_task函數(shù),而不是OS_TaskReturn函數(shù)。

是不是覺得很有趣,蠢蠢欲動,迫不及待想上手體驗一下呢?考慮到廣大群眾的焦慮,我司提供 LPC824仿真套餐服務,不用998,也不用99,只要49,你還在想什么呢?趕緊復制下面的淘口令打開淘寶上車吧

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5272

    瀏覽量

    119655
  • 匯編指令
    +關注

    關注

    0

    文章

    38

    瀏覽量

    11429
  • LPC824
    +關注

    關注

    0

    文章

    8

    瀏覽量

    5259
收藏 人收藏

    評論

    相關推薦

    用智能DAC揭開醫(yī)療報警設計的神秘面紗

    電子發(fā)燒友網(wǎng)站提供《用智能DAC揭開醫(yī)療報警設計的神秘面紗.pdf》資料免費下載
    發(fā)表于 09-14 10:50 ?0次下載
    用智能DAC<b class='flag-5'>揭開</b>醫(yī)療報警設計的<b class='flag-5'>神秘</b><b class='flag-5'>面紗</b>

    寄存器是什么意思?寄存器是如何構(gòu)成的?

    在計算機科學中,寄存器(Register)是個高速存儲單元,它位于中央處理(CPU)內(nèi)部,用于存儲計算機程序執(zhí)行過程中所需要的數(shù)據(jù)、指令地址或狀態(tài)信息。寄存器是計算機體系結(jié)構(gòu)中至關
    的頭像 發(fā)表于 08-02 18:23 ?2484次閱讀
    <b class='flag-5'>寄存器</b>是什么意思?<b class='flag-5'>寄存器</b>是如何構(gòu)成的?

    北斗衛(wèi)星時鐘——揭開“授時”的神秘面紗

    ,這些時間信息又是從哪里來的呢?為什么我們可以隨時隨地都能獲取準確的時間信息?這得益于高精度的 授時服務 ,今天我們就來揭開“授時”的神秘面紗。 ? ? ?大家都知道我國的北斗導航衛(wèi)星,是用于定位導航的。那么北斗是怎么進行定位導
    的頭像 發(fā)表于 07-25 16:21 ?284次閱讀
    北斗衛(wèi)星時鐘——<b class='flag-5'>揭開</b>“授時”的<b class='flag-5'>神秘</b><b class='flag-5'>面紗</b>

    寄存器尋址和直接尋址的區(qū)別

    。 、寄存器尋址 寄存器尋址的定義 寄存器尋址是種將操作數(shù)直接存儲在CPU內(nèi)部寄存器中的尋址
    的頭像 發(fā)表于 07-12 10:42 ?883次閱讀

    寄存器尋址的實現(xiàn)方式

    在計算機體系結(jié)構(gòu)中,寄存器尋址是種常見的尋址方式,它允許程序直接訪問CPU內(nèi)部的寄存器寄存器尋址可以提高程序的執(zhí)行效率,因為它避免了對內(nèi)存的訪問。
    的頭像 發(fā)表于 07-12 10:36 ?444次閱讀

    寄存器分為基本寄存器和什么兩種

    寄存器是計算機中用于存儲數(shù)據(jù)的高速存儲單元,它們是CPU內(nèi)部的重要組成部分。寄存器可以分為基本寄存器和擴展寄存器兩種類型。 、基本
    的頭像 發(fā)表于 07-12 10:31 ?848次閱讀

    xAI公司將在八月揭開其新Grok-2大語言模型的神秘面紗

    在科技界的浩瀚星空中,埃隆·馬斯克的每次發(fā)聲都如同璀璨的新星,瞬間照亮前行的道路。近日,這位科技巨擘在推特上的則簡短宣告,再次將全球的目光聚焦于人工智能的前沿陣地——他的初創(chuàng)公司xAI即將在八月揭開其最新力作Grok-2大語
    的頭像 發(fā)表于 07-02 11:38 ?421次閱讀

    揭開Pluto XZU20的神秘面紗—探尋未來緊湊而強大的FPGA解決方案

    創(chuàng)新成果具有挽救生命、改變生活和創(chuàng)造夢想的能力。現(xiàn)在讓我們一起緊隨Pluto產(chǎn)品發(fā)布會的步伐,揭開PlutoXZU20的神秘面紗,與我們一起
    的頭像 發(fā)表于 06-21 08:09 ?266次閱讀
    <b class='flag-5'>揭開</b>Pluto XZU20的<b class='flag-5'>神秘</b><b class='flag-5'>面紗</b>—探尋未來緊湊而強大的FPGA解決方案

    干貨滿滿:ARM的內(nèi)核寄存器講解

    內(nèi)核寄存器與外設寄存器: 內(nèi)核寄存器與外設寄存器是完全不同的概念。內(nèi)核寄存器是指 CPU 內(nèi)部的寄存器
    發(fā)表于 04-17 11:47 ?2484次閱讀
    干貨滿滿:ARM的內(nèi)核<b class='flag-5'>寄存器</b>講解

    揭開快充芯片的神秘面紗

    UFP芯片是種用于USB快充技術的關鍵元件,它在移動設備和充電器之間進行通信和協(xié)調(diào),以實現(xiàn)高效、安全、快速的充電過程。下面我們將揭開快充芯片的神秘面紗,深入探討UFP快充芯片的工作原
    的頭像 發(fā)表于 04-15 12:51 ?513次閱讀

    如何根據(jù)自己設計中的寄存器配置總線定義來生成寄存器配置模版

    無論是FPGA還是ASIC,系統(tǒng)設計中總會存在配置寄存器總線的使用,我們會將各種功能、調(diào)試寄存器掛載在寄存器總線上使用。
    的頭像 發(fā)表于 03-04 13:56 ?961次閱讀
    如何根據(jù)自己設計中的<b class='flag-5'>寄存器</b>配置總線定義來生成<b class='flag-5'>一</b>套<b class='flag-5'>寄存器</b>配置模版

    CPU的6個主要寄存器

    CPU寄存器是中央處理內(nèi)的組成部分,是有限存貯容量的高速存貯部件。寄存器是CPU內(nèi)部的元件,包括通用寄存器、專用寄存器和控制
    的頭像 發(fā)表于 02-03 15:15 ?3344次閱讀

    移位寄存器的工作原理 移位寄存器左移和右移怎么算

    移位寄存器種用于在數(shù)字電路中實現(xiàn)數(shù)據(jù)移位操作的基本電路元件。它由多個觸發(fā)以及相關控制電路組成,具有存儲、接受和移動數(shù)據(jù)的功能。移位寄存器可以分為兩種類型:串行移位
    的頭像 發(fā)表于 01-18 10:52 ?6532次閱讀

    寄存器查看的功能和使用

    16進制位關系,但是對寄存器數(shù)值的每位并沒有很直觀的展示。因此就需要個軟件直觀的查看寄存器值與位的關系。
    的頭像 發(fā)表于 11-28 12:26 ?1633次閱讀
    <b class='flag-5'>寄存器</b>查看<b class='flag-5'>器</b>的功能和使用

    芯片DFX:Coresight的寄存器

    coresight對于每個coresight組件,規(guī)定了寄存器,這些寄存器的偏移是固定的,這些寄存器,是必須存在的。但是有的,可以不實現(xiàn)該寄存器
    的頭像 發(fā)表于 11-02 11:45 ?974次閱讀
    芯片DFX:Coresight的<b class='flag-5'>寄存器</b><b class='flag-5'>一</b>覽