stm32 bootloader跳轉

stm32執行完loader程序後如何跳轉到應用程序呢,一共有四件事要做:

第一,關閉外設中斷,關閉外設時鐘,失能外設功能,如果不關閉,跳轉到app區後會產生各種奇怪的問題

第二,重設中斷向量表位置,設置在app程序的起始地址

根據stm32中斷向量表的定義,表的地址就是可執行程序的起始地址,設置好後方便應用程序進入中斷後可以找到對應的中斷程序入口

第三,重設堆棧指針,設置在app程序的起始地址,application_addr + 0x00000000

stm32復位後的第一件事就是取堆棧地址,此處跳轉也是一樣,第一件事就是取得堆棧地址,想想ucos中切到新任務第一件事不也是找到堆棧地址嗎

第四,取出app程序的main函數地址,application_addr + 0x00000004

stm32復位後的第二件事就是找到復位地址,然後從裏面取得main函數的地址,根據stm32中斷向量表的定義,復位地址的偏移量是0x04,緊挨着堆棧棧頂地址,因此需要取得application_addr + 0x00000004地址處的內容,然後執行
 

typedf void(*pfunc)(void);

((pfunc)(*(uint32_t*)(application_addr + 0x00000004)))();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章