(((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標號處開始執行