日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32四行【跳轉(zhuǎn)程序】 引申出來的幾條重要知識(shí)點(diǎn)

黃工的嵌入式技術(shù)圈 ? 來源:黃工的嵌入式技術(shù)圈 ? 2020-03-08 11:37 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

1.STM32是如何實(shí)現(xiàn)程序跳轉(zhuǎn)的?

2.復(fù)位向量表

3.理解__set_MSP語句

關(guān)鍵字幫助

堆棧指針SP

控制寄存器CONTROL

1寫在前面

上一篇文章《STM32 IAP應(yīng)用編程幾個(gè)要點(diǎn)》講述的內(nèi)容很多朋友都了解過,也都使用過ST官網(wǎng)提供的代碼。但使用過的人有許多都沒有深入了解,僅僅只是把代碼下載到板卡中跑了一下而已(因?yàn)榇a完全可以使用)。所以,很少有人研究其中細(xì)節(jié)的問題。

o4YBAF4WkDiAaA_DAAE1AZgFFc4227.png

先看一下上圖中四行跳轉(zhuǎn)代碼,接下來將圍繞這四行代碼拓展相關(guān)的內(nèi)容。

2STM32是如何實(shí)現(xiàn)程序跳轉(zhuǎn)的?

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

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

ApplicationAddress為0x8003000,代表應(yīng)用程序起始地址為0x8003000。

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

JumpAddress代表跳轉(zhuǎn)地址,基于應(yīng)用程序起始地址偏移4(這個(gè)偏移4下面章節(jié)講述)。這個(gè)地址就是應(yīng)用程序的復(fù)位地址,你可以理解為程序跳轉(zhuǎn)到了應(yīng)用程序復(fù)位的地址。

2.Jump_To_Application = (pFunction) JumpAddress;

將跳轉(zhuǎn)地址JumpAddress強(qiáng)制轉(zhuǎn)換pFunction類型,你可以理解為編譯器將其編譯成一個(gè)函數(shù)。

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

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

4.Jump_To_Application();

設(shè)置PC指針為復(fù)位地址,你可以理解為跳轉(zhuǎn)到應(yīng)用程序的函數(shù)。

這里是講述的大概內(nèi)容,細(xì)節(jié)內(nèi)容請(qǐng)往下看,看完下面細(xì)節(jié)再回來看本節(jié)內(nèi)容。

3復(fù)位向量表

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

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

o4YBAF4WkDmACHqZAAE_3S5e0cY723.jpg

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

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

pIYBAF4WkDmAHS4pAADfgf_H53c301.jpg

這里代碼和Cortex-M3技術(shù)參考手冊(cè)數(shù)據(jù)一一對(duì)應(yīng)的關(guān)系。相信看了這兩個(gè)地方的內(nèi)容,大家能明白為什么會(huì)是ApplicationAddress + 4了。

4理解__set_MSP語句

1.拓展:MDK-ARM新功能

點(diǎn)看下圖,放大,自己看截圖代碼(標(biāo)記處):

pIYBAF4WkDqAOtLqAAC8YKTDrs0130.jpg

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

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

詳細(xì)可以參看:

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

(提示:公眾號(hào)不支持外鏈接,請(qǐng)復(fù)制鏈接到瀏覽器下載)

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

1.MDK v5.25比較實(shí)用的功能

2.MDK-ARM V5.26預(yù)覽版更新的幾條重要內(nèi)容

2.理解__set_MSP語句

上面講述的內(nèi)容是想引申出來:鼠標(biāo)放在__set_MSP的位置,按F1,就可以直接進(jìn)入幫助文檔。

下面是詳細(xì)內(nèi)容截圖:

o4YBAF4WkDqALzCoAADJRZf3woc012.jpg

大概意思是:調(diào)用MSR指令設(shè)置主狀態(tài)指針(MSP)的值。

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

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

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

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

Bit[1]=0,用MSP;

Bit[1]=1,用PSP;

這里具體內(nèi)容需要參看Cortex-M技術(shù)參考手冊(cè)。

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

5“雪白”的圖片

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

當(dāng)我現(xiàn)在(2018年8月9日)百度圖片輸入“雪白”的時(shí)候,已經(jīng)不在是“雪白”的圖片了,已經(jīng)被百度程序猿GG加班加點(diǎn)改掉了。

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2313

    文章

    11195

    瀏覽量

    374746
  • 復(fù)位
    +關(guān)注

    關(guān)注

    0

    文章

    179

    瀏覽量

    25093
  • 控制寄存器
    +關(guān)注

    關(guān)注

    0

    文章

    34

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    關(guān)于車速傳感器磁鐵的一些知識(shí)點(diǎn)

    車速傳感器磁鐵在測(cè)量車輛速度中扮演著至關(guān)重要的角色,通過與霍爾效應(yīng)傳感器或磁阻傳感器配合使用,利用磁場(chǎng)變化來生成信號(hào),進(jìn)而反映車速,今天來介紹下車速傳感器磁鐵的幾個(gè)關(guān)鍵知識(shí)點(diǎn)。首先,磁鐵材質(zhì)方面
    的頭像 發(fā)表于 04-29 10:40 ?73次閱讀
    關(guān)于車速傳感器磁鐵的一些<b class='flag-5'>知識(shí)點(diǎn)</b>

    S32K系列引導(dǎo)加載程序應(yīng)用程序跨不同定制電路板設(shè)計(jì)的跳轉(zhuǎn)問題求解

    我在兩個(gè)自定義S32K358板上實(shí)現(xiàn)引導(dǎo)加載程序時(shí)遇到了問題,將不勝感激您的見解。 **設(shè)置:** - 兩塊板使用相同的S32K358微控制器 - 板 1:引導(dǎo)加載程序正常運(yùn)行 - 成功跳轉(zhuǎn)
    發(fā)表于 04-22 07:02

    示波器小知識(shí)點(diǎn)

    示波器的系統(tǒng)帶寬:是指一個(gè)逐漸升高頻率的正弦輸入信號(hào)顯示幅度下降3dB時(shí)的頻率點(diǎn)。測(cè)試信號(hào)一般是方波,而方波信號(hào)由基波及奇次諧波組成。如果用示波器去測(cè)一個(gè)方波,需要注意示波器應(yīng)從頻率上能夠測(cè)量到它
    的頭像 發(fā)表于 04-16 11:04 ?108次閱讀
    示波器小<b class='flag-5'>知識(shí)點(diǎn)</b>

    【黑金云課堂筆記】第一~二期知識(shí)點(diǎn)總結(jié)

    知識(shí)卡片一:【FPGA 基礎(chǔ)篇】開啟硬件編程之門 FPGA 的本質(zhì) : FPGA(現(xiàn)場(chǎng)可編程門陣列)并非在運(yùn)行軟件程序,而是在 構(gòu)建電路本身 。用戶可以通過 Verilog/VHDL 等硬件描述
    的頭像 發(fā)表于 04-01 16:10 ?239次閱讀

    【黑金云課堂筆記】第三期知識(shí)點(diǎn)總結(jié)

    ,對(duì) FPGA 免費(fèi)直播課的熱情也感染到了黑金云課堂的老師們。接下來我們會(huì)再接再厲,把每一期直播都做得更扎實(shí) ? 更多精彩課程歡迎關(guān)注我們 黑金云課堂全年免費(fèi)直播課 ,現(xiàn)在讓我們先來回顧一下上周的知識(shí)點(diǎn)精華—— ? 數(shù)據(jù)類型 常量 進(jìn)制表示:二進(jìn)制(b/B)、八進(jìn)制(o/
    的頭像 發(fā)表于 04-01 16:08 ?204次閱讀
    【黑金云課堂筆記】第三期<b class='flag-5'>知識(shí)點(diǎn)</b>總結(jié)

    京東:調(diào)用用戶行為API分析購(gòu)買路徑,優(yōu)化頁面跳轉(zhuǎn)邏輯

    數(shù)據(jù)采集 通過埋點(diǎn)API實(shí)時(shí)捕獲用戶行為: ? // 頁面跳轉(zhuǎn)事件追蹤jtrack.event('page_transition', { from: 'product_detail
    的頭像 發(fā)表于 09-18 14:38 ?825次閱讀
    京東:調(diào)用用戶行為API分析購(gòu)買路徑,優(yōu)化頁面<b class='flag-5'>跳轉(zhuǎn)</b>邏輯

    STM32程序的燒錄方式

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

    IAP升級(jí)跳轉(zhuǎn)APP跳轉(zhuǎn)Boot失敗了怎么解決?

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

    【「Yocto項(xiàng)目實(shí)戰(zhàn)教程:高效定制嵌入式Linux系統(tǒng)」閱讀體驗(yàn)】01初讀體驗(yàn)

    第三章和第章,更多的是從語法和源文件分析的角度上去講解yocto相關(guān)的基礎(chǔ)知識(shí),但由于內(nèi)容比較偏知識(shí)點(diǎn)講解,缺乏實(shí)戰(zhàn),因此看完后,腦海中僅有個(gè)概念,看到后面的內(nèi)容時(shí)還需要往回翻對(duì)應(yīng)的知識(shí)點(diǎn)
    發(fā)表于 06-30 21:49

    bindsheet+鍵盤在頁面跳轉(zhuǎn)時(shí)的bug及處理思路

    調(diào)試的時(shí)候,我發(fā)現(xiàn)實(shí)際的效果是: 當(dāng)點(diǎn)擊“去計(jì)算”按鈕時(shí),整個(gè)bindsheet部分是先向上彈了一下,位移了一點(diǎn)點(diǎn)的距離(大概10vp左右),然后頁面會(huì)停頓一下,再跳轉(zhuǎn)到新頁面 雖然說
    發(fā)表于 06-30 17:36

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

    實(shí)現(xiàn)IAP的功能,使用CUEBIDE生成的APP程序的bin文件,寫入到FLASH之后,無法正常跳轉(zhuǎn)。 程序卡在/ 檢查棧頂?shù)刂肥欠窈戏?/ 但是用KEIL生成的bin文件寫入后可以正常跳轉(zhuǎn)
    發(fā)表于 06-09 06:43

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

    實(shí)現(xiàn)IAP的功能,使用CUEBIDE生成的APP程序的bin文件,寫入到FLASH之后,無法正常跳轉(zhuǎn)。 程序卡在/[i] 檢查棧頂?shù)刂肥欠窈戏?/ 但是用KEIL生成的bin文件寫入后可以正常
    發(fā)表于 06-05 07:15

    EMC 設(shè)計(jì)避坑指南:不口訣

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

    【「# 運(yùn)算放大器參數(shù)解析與LTspice應(yīng)用仿真」閱讀體驗(yàn)】+全書概覽與第一章閱讀分享

    先來詳細(xì)閱讀下第一章,分享下相關(guān)內(nèi)容。 第一章主要介紹運(yùn)放的基礎(chǔ)知識(shí),學(xué)過模電的都很容易理解,可能教材上學(xué)過的忘記了, 這里可以作為摘出來的重點(diǎn)溫故知新復(fù)習(xí)下。全文沒有廢話,都是娓娓道來各個(gè)知識(shí)點(diǎn)
    發(fā)表于 05-22 23:18

    C51單片機(jī)及C語言知識(shí)點(diǎn)必備秘籍

    單片機(jī)關(guān)鍵知識(shí)點(diǎn)一覽: 系列一 1:?jiǎn)纹瑱C(jī)簡(jiǎn)敘 2:?jiǎn)纹瑱C(jī)引腳介紹 3:?jiǎn)纹瑱C(jī)存儲(chǔ)器結(jié)構(gòu) 4:第一個(gè)單片機(jī)小程序 5:?jiǎn)纹瑱C(jī)延時(shí)程序分析 6:?jiǎn)纹瑱C(jī)并行口結(jié)構(gòu) 7:?jiǎn)纹瑱C(jī)的特殊
    發(fā)表于 05-15 14:00
    禄劝| 石首市| 黔西| 麻城市| 迭部县| 礼泉县| 漠河县| 库车县| 莎车县| 余江县| 宁安市| 綦江县| 漠河县| 阿坝| 泗阳县| 田林县| 广平县| 杭州市| 广元市| 灌云县| 周口市| 田阳县| 比如县| 乌审旗| 望都县| 靖宇县| 太谷县| 沅陵县| 林周县| 竹山县| 长丰县| 平谷区| 南开区| 绥江县| 太仆寺旗| 麦盖提县| 石门县| 太康县| 葵青区| 陇川县| 通州区|