色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

一文看懂LR寄存器的知識

UtFs_Zlgmcu7890 ? 來源:互聯網 ? 作者:佚名 ? 2017-10-31 06:36 ? 次閱讀

不知你在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函數。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴

原文標題:神秘的LR寄存器

文章出處:【微信號:Zlgmcu7890,微信公眾號:周立功單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    解析Matlab如何實現移位寄存器

    本文主要介紹Matlab如何實現移位寄存器,首先介紹的是移位寄存器的原理及作用,其次介紹了m序列的生成原理及m序列的matlab 仿真實現,最后介紹了Matlab如何實現移位寄存器的代碼。
    的頭像 發表于 04-26 09:28 ?1.7w次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>解析Matlab如何實現移位<b class='flag-5'>寄存器</b>

    ARM開發中幾個常見的寄存器詳解

    筆者今天來聊聊對于ARM幾個特殊寄存器的理解,FP、SP和LR。
    發表于 11-22 09:02 ?4310次閱讀

    lr寄存器

    連接寄存器(Link Register, LR),在ARM體系結構中LR的特殊用途有兩種:是用來保存子程序返回地址;二是當異常發生時,LR
    發表于 01-27 14:21

    寄存器與移位寄存器

    寄存器與移位寄存器 寄存器是用來寄存數碼的邏輯部件,所以必須具備接收和寄存數碼的功能。任何
    發表于 03-12 15:19 ?59次下載

    寄存器,寄存器是什么意思

    寄存器,寄存器是什么意思 寄存器定義  寄存器是中央處理內的組成部分。寄存器是有限存貯容量
    發表于 03-08 14:26 ?2.2w次閱讀

    數據寄存器,數據寄存器是什么意思

    數據寄存器,數據寄存器是什么意思 數據寄存器數據寄存器包括累加AX、基址寄存器BX、計數
    發表于 03-08 14:38 ?1.3w次閱讀

    移位寄存器,移位寄存器是什么意思

    移位寄存器,移位寄存器是什么意思 移位寄存器_
    發表于 03-08 14:50 ?1.8w次閱讀

    寄存器與移位寄存器

    寄存器與移位寄存器:介紹寄存器原理和移位寄存器的原理及實現。
    發表于 05-20 11:47 ?0次下載

    看懂暫存寄存器的區別

    本文開始介紹了暫存的定義和結構組成,其次介紹了暫存分類與寄存器定義,最后介紹了寄存器的原理。
    發表于 04-11 09:30 ?1.6w次閱讀

    看懂8086CPU寄存器的特點和作用

    8086有14個16位寄存器,這14個寄存器按其用途可分為通用寄存器、指令指針、標志寄存器和段寄存器等4類。下面就來看看這四個
    發表于 04-16 11:36 ?1.1w次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>看懂</b>8086CPU<b class='flag-5'>寄存器</b>的特點和作用

    開發個Linux調試就必須要知道寄存器和內存!

    在我們正真的讀取寄存器前,調試需要知道些關于x8664架構的相關知識。包括通用寄存器,專用寄存器
    發表于 05-14 17:28 ?1506次閱讀

    工業機器人FANUC數據位置寄存器和位置寄存器的運用小知識分享

    工業機器人FANUC數據位置寄存器和位置寄存器的運用 、寄存器指令 Registers① 寄存器指令R[i] i=1~200② 位置
    的頭像 發表于 06-22 10:08 ?3.3w次閱讀
    工業機器人FANUC數據位置<b class='flag-5'>寄存器</b>和位置<b class='flag-5'>寄存器</b>的運用小<b class='flag-5'>知識</b>分享

    了解MIPS的寄存器

    MIPS 有32個寄存器(0~31), 每個寄存器各有不同的用途。
    的頭像 發表于 06-23 08:59 ?7834次閱讀

    寄存器的基本知識

    幾乎我們設計的每個模塊都會有寄存器,而它們的寄存器或多或少能被CPU訪問到。但CPU的接口通常只有組總線去訪問這些模塊,所以設計上都會把CPU和各個模塊掛到總線上。這樣CPU作為Master就能夠訪問到所有的模塊了。
    的頭像 發表于 07-26 13:52 ?1w次閱讀

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

    寄存器是計算機中用于存儲數據的高速存儲單元,它們是CPU內部的重要組成部分。寄存器可以分為基本寄存器和擴展寄存器兩種類型。 、基本
    的頭像 發表于 07-12 10:31 ?1577次閱讀
    主站蜘蛛池模板: 欧美一区二区高清 | 日韩欧美精品有码在线播放免费 | 美女教师朝桐光在线播放 | 强奷表妺好紧2 | 国产精品日本一区二区在线播放 | 精品久久久爽爽久久久AV | 亚洲成片在线看 | 国语自产二区高清国语自产拍 | 成片免费观看视频大全 | 小小水蜜桃免费影院 | 99国产热视频在线观看 | 一品道门免费视频韩国 | 国产精品免费小视频 | 973午夜伦伦电影论片 | 99爱视频在线观看 | 久久精品动漫99精品动漫 | 在线观看视频一区 | 人妻少妇69式99偷拍 | 亚洲日韩欧美国产专区 | yellow在线观看免费直播 | 国内精品不卡一区二区三区 | 热热久久超碰精品中文字幕 | 亚洲欧洲日韩天堂无吗 | 啊好大好厉害好爽真骚 | 免费人成在线观看视频不卡 | 国内卡一卡二卡三免费网站 | 天天影视香色欲综合网 | 国产成人精品免费视频大全可播放的 | 亚洲福利电影一区二区? | 在线 无码 中文 强 乱 | 国产偷抇久久精品A片蜜臀AV | 无码射肉在线播放视频 | 久久伊人天堂视频网 | 久久婷婷电影网 | 9420高清完整版在线电影免费观看 | 亚洲AV蜜桃永久无码精品红樱桃 | 国产精品久久久久久无码专区 | 亚洲 自拍 偷拍 另类综合图区 | 亚洲中文字幕无码一去台湾 | 奇米狠狠一区二区三区 | 日本aaaa|