(*((void (*)(void))(*(unsigned long *)0x2c)))(); 是什麼意思?

(((void ()(void))((unsigned long )0x2c)))(); 是什麼意思?
在8962的boot_demo1中 (
((void (
)(void))(*(unsigned long *)0x2c)))(); 是什麼意思?是把程序引導到地址爲0X2C的位置?

這個語句會執行位於bootloader的SVC(軟中斷)異常服務例程,還是分解一下吧:

(*(unsigned long *)0x2c):將0x2C強制轉化爲unsigned long類型指針,並指向該地址所在的數據;

void (*)(void) :函數指針,指針名爲空,該函數參數爲空,返回值爲空

(void ()(void))((unsigned long *)0x2c):將Flash地址0x2C中的內容強制轉化爲函數指針,該函數參數爲空,返回值爲空

(((void ()(void))(*(unsigned long *)0x2c)))();:調用函數,即開始從啓動代碼中的UpdateHandler標號處開始執行

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