在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

STM32四行【跳轉程序】 引申出來的幾條重要知識點

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-03-08 11:37 ? 次閱讀

本文分享以下幾點(引申出來的)重要知識點:

1.STM32是如何實現程序跳轉的?

2.復位向量表

3.理解__set_MSP語句

關鍵字幫助

堆棧指針SP

控制寄存器CONTROL

1寫在前面

上一篇文章《STM32 IAP應用編程幾個要點》講述的內容很多朋友都了解過,也都使用過ST官網提供的代碼。但使用過的人有許多都沒有深入了解,僅僅只是把代碼下載到板卡中跑了一下而已(因為代碼完全可以使用)。所以,很少有人研究其中細節的問題。

o4YBAF4WkDiAaA_DAAE1AZgFFc4227.png

先看一下上圖中四行跳轉代碼,接下來將圍繞這四行代碼拓展相關的內容。

2STM32是如何實現程序跳轉的?

上圖四行代碼中有幾個定義沒有貼出來,下面一并貼出來:

#defineApplicationAddress0x8003000typedefvoid(*pFunction)(void);pFunction Jump_To_Application;uint32_t JumpAddress;

ApplicationAddress為0x8003000,代表應用程序起始地址為0x8003000。

1.JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);

JumpAddress代表跳轉地址,基于應用程序起始地址偏移4(這個偏移4下面章節講述)。這個地址就是應用程序的復位地址,你可以理解為程序跳轉到了應用程序復位的地址。

2.Jump_To_Application = (pFunction) JumpAddress;

將跳轉地址JumpAddress強制轉換pFunction類型,你可以理解為編譯器將其編譯成一個函數。

3.__set_MSP(*(__IO uint32_t*) ApplicationAddress);

這里是將把應用程序起始地址設為棧頂指針(__set_MSP下面章節講述)。

4.Jump_To_Application();

設置PC指針為復位地址,你可以理解為跳轉到應用程序的函數。

這里是講述的大概內容,細節內容請往下看,看完下面細節再回來看本節內容。

3復位向量表

上面講述了ApplicationAddress + 4“偏移4”這個問題,其實這個“偏移4”就是向量表的偏移地址:復位向量(PC 初始值)。

拿Cortex-M3(STM32F1)為例(其它M0、M4類似),Cortex-M3權威手冊(中文)表 7.6 上電后的向量表:

o4YBAF4WkDmACHqZAAE_3S5e0cY723.jpg

是什么意思呢?就是相對應用程序存儲起始地址的一張向量表,而這張向量表就是按照這樣的約定:偏移4的地址為復位向量(PC 初始值),也就是我們應用程序復位的地方。

同樣,可以參看啟動代碼(以STM32F1為例):

pIYBAF4WkDmAHS4pAADfgf_H53c301.jpg

這里代碼和Cortex-M3技術參考手冊數據一一對應的關系。相信看了這兩個地方的內容,大家能明白為什么會是ApplicationAddress + 4了。

4理解__set_MSP語句

1.拓展:MDK-ARM新功能

點看下圖,放大,自己看截圖代碼(標記處):

pIYBAF4WkDqAOtLqAAC8YKTDrs0130.jpg

用MDK-ARM V5.25及以上版本打開工程,可以看到在__set_MSP下面有一行下劃線,什么意思呢?

這是MDK-ARM V5.25的新功能(現在,MDK-ARM V5.26就快要出來了)具有上下文幫助(F1)的關鍵字將用淺灰色下劃線突出顯示。

詳細可以參看:

http://www2.keil.com/mdk5/525

(提示:公眾號不支持外鏈接,請復制鏈接到瀏覽器下載)

這里推薦閱讀我另外兩篇文章:

1.MDK v5.25比較實用的功能

2.MDK-ARM V5.26預覽版更新的幾條重要內容

2.理解__set_MSP語句

上面講述的內容是想引申出來:鼠標放在__set_MSP的位置,按F1,就可以直接進入幫助文檔。

下面是詳細內容截圖:

o4YBAF4WkDqALzCoAADJRZf3woc012.jpg

大概意思是:調用MSR指令設置主狀態指針(MSP)的值。

物理上存在兩個不同的堆棧指針(SP):

1.主堆棧指針(MSP),復位后的默認堆棧指針。在運行異常處理程序時也使用它。

2.進程堆棧指針(PSP),只能在線程模式下使用。

當引用R13堆棧指針(SP)時,由控制寄存器(CONTROL)的Bit[1]決定:

Bit[1]=0,用MSP;

Bit[1]=1,用PSP;

這里具體內容需要參看Cortex-M技術參考手冊。

我的另外一篇文章《如何判斷CPU是否正在執行中斷函數》講述了關于控制寄存器(CONTROL)的一種使用方法,可以參看我那一篇文章。

5“雪白”的圖片

還是跟隨熱點,相信大家都聽說了“關于谷歌回來的消息”,據知情人透露,谷歌回來幾乎不可能。

當我現在(2018年8月9日)百度圖片輸入“雪白”的時候,已經不在是“雪白”的圖片了,已經被百度程序猿GG加班加點改掉了。

百度圖片搜索“雪白”如下圖:

谷歌圖片搜索“雪白”如下圖:

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

    關注

    2270

    文章

    10915

    瀏覽量

    356747
  • 復位
    +關注

    關注

    0

    文章

    174

    瀏覽量

    24232
  • 控制寄存器
    +關注

    關注

    0

    文章

    34

    瀏覽量

    11505
收藏 人收藏

    評論

    相關推薦

    Docker-鏡像的分層-busybox鏡像制作

    目錄 知識點1:鏡像的分層 示例:進入 docker hub查看Jenkins的Dockerfile 知識點2:base鏡像 知識點3:scratch鏡像 scratch 鏡像是什么? 示例:在
    的頭像 發表于 01-15 10:44 ?42次閱讀
    Docker-鏡像的分層-busybox鏡像制作

    Aigtek功率放大器應用:電感線圈的知識點分享

    電磁驅動是功率放大器的一大基礎應用領域,其中我們最常見的就是用功放來驅動電感線圈,那么關于電感線圈的這10大知識點你都知道嗎?今天Aigtek安泰電子來給大家介紹一下電感線圈的基礎知識
    的頭像 發表于 01-07 15:43 ?115次閱讀
    Aigtek功率放大器應用:電感線圈的<b class='flag-5'>知識點</b>分享

    后悔沒有早點看到:天線設計中的知識點

    Cat.1 bis R13架構,天線架構精簡為單天線架構,去掉了分集接收天線,因此只需要一根天線。 ? 知識點: Cat.1 bis相對于Cat.1的區別是,后者為兩根天線(一根主天線,一根分集天線
    的頭像 發表于 12-24 17:11 ?396次閱讀
    后悔沒有早點看到:天線設計中的<b class='flag-5'>知識點</b>!

    單片機中斷相關知識點

    (EA=1)、申請中斷的中斷源的中斷允許位為1。當滿足響應條件后,CPU會保護斷點,即將程序計數器(PC)的內容壓入堆棧,并將程序計數器指向中斷向量地址。(3)中斷服務程序執行:CPU跳轉
    發表于 11-30 09:49

    接口測試理論、疑問收錄與擴展相關知識點

    本文章使用王者榮耀游戲接口、企業微信接口的展示結合理論知識,講解什么是接口測試、接口測試理論、疑問收錄與擴展相關知識點知識學院,快來一起看看吧~
    的頭像 發表于 11-15 09:12 ?354次閱讀
    接口測試理論、疑問收錄與擴展相關<b class='flag-5'>知識點</b>

    在VSCODE終端make時遇到錯誤要一看然后定位,可以直接跳轉點擊或者VSCODE定位錯誤嗎?

    每次在VSCODE終端make時遇到錯誤要一看然后定位,可以直接跳轉點擊或者VSCODE直接定位錯誤嗎?能給個指引鏈接嗎?謝謝!
    發表于 06-25 07:37

    STM32F1 IAP操作讀保護選項字節設置,APP使用系統復位跳轉后無法運行IAP的原因?

    最近調試一個程序,是基于STM32F1做的IAP,升級前后需要修改選項字節,FLASH_EraseOptionBytes函數內OB->RDP=RDP_Key語句實現讀保護的解除,如果我
    發表于 05-13 08:09

    模擬電子技術知識點問題總結概覽

    給大家分享模擬電子技術知識點問題總結。
    的頭像 發表于 05-08 15:16 ?1204次閱讀
    模擬電子技術<b class='flag-5'>知識點</b>問題總結概覽

    STM32H747用DTCM-ram啟動,跳轉之后app程序無法運行的原因?

    目前用的STM32H747,寫BOOTLOADER程序是運行在M7上,bootloader分兩次分別將APP1和APP2寫到指定的地址, app1 M7的啟動地址為0x08040000 ,app2
    發表于 04-01 07:19

    一篇搞定DCS系統相關知識點

    目標。DCS系統廣泛應用于各個行業,如化工、電力、制藥等。在這些行業中,DCS系統可以實現對生產過程的集中監控和分散控制,提高生產效率和產品質量,降低能耗和減少環境污染,從而保證產品質量,并確保生產過程的安全可靠。 二.DCS系統知識點
    的頭像 發表于 03-26 18:40 ?957次閱讀
    一篇搞定DCS系統相關<b class='flag-5'>知識點</b>

    STM32L431RCT6從用戶代碼區跳轉使用內置system memory bootloader無效怎么解決?

    STM32L431RCT6 從用戶代碼區跳轉使用內置system memory bootloader 無效。 1. 跳轉代碼如下,這個代碼 可以在STM32F407VET6上正常
    發表于 03-26 07:54

    stm32h750vbt6實現bootloader跳轉到外部Qsip flash執行代碼,跳轉后APP程序不執行怎么解決?

    stm32h750vbt6實現bootloader跳轉到外部Qsip flash執行代碼,跳轉后APP程序不執行
    發表于 03-19 07:24

    keil仿真查看反匯編,匯編窗口怎么跳轉到指定

    如圖所示,想在匯編窗口跳轉到C:045F,查看匯編原碼;怎么操作?有無直接跳轉的辦法 現在只能用鼠標滾輪一直翻,有時候還到不了指定;
    發表于 03-14 07:28

    【量子計算機重構未來 | 閱讀體驗】第二章關鍵知識點

    本帖最后由 oxlm_1 于 2024-3-6 23:20 編輯 之所以將第二章單獨拿出來,是因為在閱讀過程中,發現第二章知識點較多,理解起來比較耗時間。 第二章的主要知識點: 量子
    發表于 03-06 23:17

    Vim跳轉技巧

    相對跳轉用于在當前行的基礎上向上或向下跳轉一定的行數。可以在命令模式下輸入:num命令,其中num可以是正數、負數。例如,要向上跳轉5,可以在命令模式下輸入:+5,然后按下回車鍵即可
    的頭像 發表于 01-18 16:30 ?1512次閱讀
    主站蜘蛛池模板: 一级毛片在线不卡直接观看| 香蕉视频久久久| 毛片午夜| 日本一级成人毛片免费观看| h视频在线看| 视频一区二区在线观看| 久久精品国产精品亚洲婷婷| 在线观看成人网| 亚洲欧美日韩高清mmm777| 亚洲乱码尤物193yw在线播放| 搡女人视频免费| 欧美视频一区二区三区在线观看| 中文字幕1页| 色天使视频| 九色在线播放| china国语对白刺激videos| 亚洲免费小视频| 国产未成女年一区二区| 一区二区三区亚洲| 一级特黄性生活大片免费观看| 国内一区二区三区精品视频| 亚洲人成网站在线在线| 月夜免费观看高清在线完整| 五月婷婷在线观看视频| 一级特黄特黄xxx视频| 色香蕉在线观看网站| 免费恐怖片| www.日本免费| 久久天天躁夜夜躁狠狠| 亚洲一区免费看| 四虎在线免费播放| 国产一级做a爰片久久毛片男| 久久精品亚洲一级毛片 | 日韩精品卡4卡5卡6卡7卡 | 人人九九精| 在线日韩一区| 欧美日韩无| 男人的天堂视频在线| 97色偷偷| 失禁h啪肉尿出来高h健身房| 手机看片国产精品|