国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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
    +關注

    關注

    2308

    文章

    11160

    瀏覽量

    373043
  • 復位
    +關注

    關注

    0

    文章

    179

    瀏覽量

    25021
  • 控制寄存器
    +關注

    關注

    0

    文章

    34

    瀏覽量

    11793
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    STM32程序的燒錄方式

    電子發燒友網站提供《STM32程序的燒錄方式.pdf》資料免費下載
    發表于 08-28 16:03 ?8次下載

    IAP升級跳轉APP跳轉Boot失敗了怎么解決?

    使用的MCU是STM32U535RC ,V6 編譯器 跳轉實現的功能如下 /** *@brief直接跳轉到 Boot 程序 */ void LibJumpToBoot(UIN
    發表于 07-21 06:15

    【「Yocto項目實戰教程:高效定制嵌入式Linux系統」閱讀體驗】01初讀體驗

    第三章和第章,更多的是從語法和源文件分析的角度上去講解yocto相關的基礎知識,但由于內容比較偏知識點講解,缺乏實戰,因此看完后,腦海中僅有個概念,看到后面的內容時還需要往回翻對應的知識點
    發表于 06-30 21:49

    bindsheet+鍵盤在頁面跳轉時的bug及處理思路

    調試的時候,我發現實際的效果是: 當點擊“去計算”按鈕時,整個bindsheet部分是先向上彈了一下,位移了一點點的距離(大概10vp左右),然后頁面會停頓一下,再跳轉到新頁面 雖然說
    發表于 06-30 17:36

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

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

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

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

    EMC 設計避坑指南:不口訣

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

    【「# 運算放大器參數解析與LTspice應用仿真」閱讀體驗】+全書概覽與第一章閱讀分享

    先來詳細閱讀下第一章,分享下相關內容。 第一章主要介紹運放的基礎知識,學過模電的都很容易理解,可能教材上學過的忘記了, 這里可以作為摘出來的重點溫故知新復習下。全文沒有廢話,都是娓娓道來各個知識點
    發表于 05-22 23:18

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

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

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

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

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

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

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

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

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

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

    stm32cubeide-boot loader跳轉APP后不能執行怎么解決?

    keil編譯同樣的程序boot跳轉app執行是沒有問題的,切換的cubeide之后跳轉之后app壓根就不能執行,需要什么關鍵配置嗎?
    發表于 03-12 07:12

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

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