日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]1、函數(shù)原型:void Jump_Address(void){if (((*(volatile u32*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000){test = (*(volatile u32*)ApplicationAddress);JumpAddress = *(volatile u32*) (ApplicationAddr

1、函數(shù)原型:

void Jump_Address(void)

{

if (((*(volatile u32*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)

{

test = (*(volatile u32*)ApplicationAddress);

JumpAddress = *(volatile u32*) (ApplicationAddress + 4);

Jump_To_Application = (pFunction) JumpAddress;

__set_MSP(*(volatile u32*) ApplicationAddress);

Jump_To_Application();

}

}

2、if (((*(volatile u32*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)分析:

ApplicationAddress存放的是用戶程序Flash的首地址,(*(volatile u32*)ApplicationAddress)的意思是取用戶程序首地址里面的數(shù)據(jù),這個數(shù)據(jù)就是用戶代碼的堆棧地址,堆棧地址指向RAM,而RAM的起始地址是0x20000000,因此上面的判斷語句執(zhí)行:判斷用戶代碼的堆棧地址是否落在:0x20000000~0x2001ffff區(qū)間中,這個區(qū)間的大小為128K,筆者查閱STM32各型號的RAM大小,目前RAM最大的容量可以做到192K+4K,時鐘頻率為168MHZ。一般情況下,我們使用的芯片較多的落在<128K RAM的區(qū)間,因此上面的判斷語句是沒有太大問題的。

3、經(jīng)過2的分析,test保存的就是堆棧地址(并且是應(yīng)用程序堆棧的棧頂?shù)刂罚?,查看STM32的向量表,可以知道:棧頂?shù)刂返牡刂?+ 4 存放的是復(fù)位地址,因此JumpAddress存放的是復(fù)位地址。

4、調(diào)用__set_MSP函數(shù)后,將把用戶代碼的棧頂?shù)刂吩O(shè)為棧頂指針

5、Jump_To_Application();的意思就是設(shè)置PC指針為復(fù)位地址。

CORTEX-M3上電后后檢測BOOT引腳的電平來決定PC的位置。例:BOOT設(shè)置為FLASH啟動,啟動后CPU會先取兩個地址:一個是棧頂?shù)刂?,另一個是復(fù)位地址。因此才有了第4、第5點的寫法。


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉