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

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

    文章

    10921

    瀏覽量

    356998
  • 復位
    +關注

    關注

    0

    文章

    174

    瀏覽量

    24239
  • 控制寄存器
    +關注

    關注

    0

    文章

    34

    瀏覽量

    11507
收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

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

    單片機中斷相關知識點

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

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

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

    STM32F103RE只有掛調試器IAP程序才能正常跳轉嗎?

    最近在開發一款基于STM32F103RET6的產品,要求支持固件升級,目前是基于USART1的IAP,Toolchain是IAR。 IAP的程序是參考官方的例程做的,大體沒變,只是BSP方面改了一下
    發表于 04-25 07:03

    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 ?976次閱讀
    一篇搞定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
    主站蜘蛛池模板: 国产哺乳期奶水avav| 色丁香婷婷综合缴情综| 永久免费在线看mv| 恋夜影院安卓免费列表uc| qovd伦理| 亚洲AV无码乱码A片无码蜜桃| 日韩欧无码一区二区三区免费不卡 | 精品无码一区二区三区不卡| 97国产揄拍国产精品人妻| 肉色欧美久久久久久久蜜桃| 果冻传媒色AV国产播放| 97超碰在线视频人人av| 卫生间被教官做好爽HH视频| 亚洲AV精品一区二区三区不卡 | 在线综合 亚洲 欧美| 大岛优香久久中文字幕| 亚洲成年男人的天堂网| 内射爽无广熟女亚洲| 国产精片久久久久久婷婷| 中文字幕乱码在线人视频| 特级毛片s级全部免费| 久久足恋网| 国产麻豆精品久久一二三| 67194成网页发布在线观看| 午夜射精日本三级| 欧美激情精品久久久久久不卡| 国产真实女人一级毛片| xxx88中国| 在线观看亚洲 日韩 国产| 乌克兰xxxxx| 欧美亚洲天堂网| 久久久免费观看| 国产精亚洲视频综合区| qvod免费电影| 在线视频 国产精品 中文字幕| 视频网站入口在线看| 嫩草国产福利视频一区二区| 幻女FREE性俄罗斯学生| 俄罗斯人与动ZOOZ| bl高h肉文| 91九色porny蝌蚪|