在线观看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
    +關注

    關注

    2290

    文章

    11018

    瀏覽量

    362766
  • 復位
    +關注

    關注

    0

    文章

    179

    瀏覽量

    24588
  • 控制寄存器
    +關注

    關注

    0

    文章

    34

    瀏覽量

    11625
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    CUEBIDE生成的APP程序,在寫入FLASH之后無法正常跳轉怎么解決?

    實現IAP的功能,使用CUEBIDE生成的APP程序的bin文件,寫入到FLASH之后,無法正常跳轉程序卡在/ 檢查棧頂地址是否合法 / 但是用KEIL生成的bin文件寫入后可以正常跳轉
    發表于 06-09 06:43

    EMC 設計避坑指南:不口訣

    明明設計得很好,為什么一做EMC測試就失敗?雷卯EMC小哥教大家4個超實用的EMC設計技巧不口訣,幫你避開常見的坑!準則1讓電流“走捷徑”,不繞遠路核心邏輯:高頻電流走“電感最小路徑”,環路越大→輻射越強!雷卯實驗室關鍵知識點
    的頭像 發表于 05-29 09:03 ?269次閱讀
    EMC 設計避坑指南:<b class='flag-5'>四</b>不口訣

    C51單片機及C語言知識點必備秘籍

    單片機關鍵知識點一覽: 系列一 1:單片機簡敘 2:單片機引腳介紹 3:單片機存儲器結構 4:第一個單片機小程序 5:單片機延時程序分析 6:單片機并行口結構 7:單片機的特殊
    發表于 05-15 14:00

    電機選型計算公式與知識點匯總

    純分享帖,需要者可點擊附件獲取完整資料~~~*附件:電機選型計算公式與知識點匯總.pdf 【免責聲明】內容轉自今日電機,因轉載眾多,無法確認真正原始作者,故僅標明轉載來源。版權歸原出處所有,純分享帖,侵權請聯系刪除內容以保證您的權益。
    發表于 04-29 16:10

    電氣工程師必知必會的100個電?知識點分享

    電??程師也都是從電?學徒??步?步積累成長起來的。積跬步?千?,匯細流成江海!朋友們,現在讓我們??個捷徑,花半個?時的時間來積累100個必知必會的電?知識點吧!
    的頭像 發表于 03-14 11:05 ?829次閱讀

    如何用幾條命令搞定Ubuntu系統的網絡配置

    在某些場景下,設備沒有顯示器或屏可以用,這時候通過命令行來設置網絡就變得特別重要了。本文將介紹如何用幾條命令搞定Ubuntu系統的網絡配置。
    的頭像 發表于 03-14 10:53 ?1910次閱讀
    如何用<b class='flag-5'>幾條</b>命令搞定Ubuntu系統的網絡配置

    使用stm32cubeide debug是可以運行的,但是就是不能跳轉,為什么?

    使用stm32cubeide debug是可以運行的,但是就是不能跳轉,很奇怪
    發表于 03-12 08:01

    請問STM32H5遞增HDPL后如何跳轉下一級程序

    STM32H5的HDP保護,比如某一級ROT提升HDP等級并跳轉下一級代碼運行。那設置HDP等級提升后,立刻生效嗎?如果生效,芯片不能再執行當前ROT中的程序,接下來怎么跳轉到下一級
    發表于 03-11 06:00

    華邦電子安全閃存關鍵知識點

    黑客攻擊?高溫考驗?駕駛安全?通通沒在怕的!1月15日,華邦電子舉辦了“安全閃存強化車用電子安全性”為主題的線上研討會。為了讓沒能參加這場線上研討會的邦友們也可以清晰 Get 安全閃存關鍵知識點,邦
    的頭像 發表于 02-12 18:15 ?696次閱讀

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

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

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

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

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

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

    單片機中斷相關知識點

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

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

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

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

    每次在VSCODE終端make時遇到錯誤要一看然后定位,可以直接跳轉點擊或者VSCODE直接定位錯誤嗎?能給個指引鏈接嗎?謝謝!
    發表于 06-25 07:37
    主站蜘蛛池模板: 色午夜影院| 伊人亚洲综合网成人 | 天天干天天干天天天天天天爽 | 狠狠噜噜| 国产午夜视频在线观看第四页 | 噜噜色噜噜| 人人爽天天爽夜夜爽qc | 成人自拍视频 | 日本三级日本三级人妇三级四 | 天堂在线bt | 国产精品29页 | 性欧美高清强烈性视频 | 亚洲日韩色综合视频 | 色视频www在线播放国产人成 | 亚洲综合一| aaaaaa级特色特黄的毛片 | 欧美一级黄色片 | 亚洲一区在线观看视频 | 亚洲国产午夜精品理论片的软件 | 免费日韩毛片 | 国产理论最新国产精品视频 | 久久精品视频99精品视频150 | 亚洲成人99 | 天天干人人 | 狠狠干天天干 | 国产性大片黄在线观看在线放 | 免费黄色大片网站 | 在线免费观看h | 五月婷婷狠狠 | 成年黄网站免费大全毛片 | 黑人xxxx精品 | 色婷婷综合久久久久中文一区二区 | 好吊色青青青国产在线观看 | 婷婷免费高清视频在线观看 | 东京毛片 | va国产| 色婷婷影院在线视频免费播放 | 日本aaaa级毛片在线看 | 色天天综合色天天碰 | 亚洲精品成人在线 | 2018天堂视频免费观看 |