IAP起始地址:iapaddr
APP起始地址:appaddr
中斷向量表的起始地址:IAP:iapaddr+4(APP:appaddr+4)
中斷向量存儲的內(nèi)容是中斷服務(wù)程序的入口地址
typedef void(*iapfun)(void);? //定義函數(shù)指針類型
理解:iapfun表示一個指向函數(shù)的指針類型的名字,該指針類型為“指向返回void類型并且無參數(shù)的函數(shù)的指針”,可以使用函數(shù)名對函數(shù)指針進行初始化(定義函數(shù)指針對象):
iapfun iapjump2app; ?//定義函數(shù)指針對象
jump2app=(iapfun)*(vu32*)(appxaddr+4); ?//為函數(shù)指針對象賦值
appxaddr+4:APP程序中斷向量表起始地址(即復(fù)位中斷)
(vu32*)(appxaddr+4):將APP程序中斷向量表起始地址強制類型轉(zhuǎn)換為指向vu32類型數(shù)據(jù)的地址
*(vu32*)(appxaddr+4):取出(vu32*)(appxaddr+4)地址所存儲的內(nèi)容(這個內(nèi)容剛好就是該地址對應(yīng)中斷向量的中斷服務(wù)程序入口地址,其實就是復(fù)位中斷服務(wù)程序函數(shù)的函數(shù)名)
jump2app(); ?//調(diào)用函數(shù)
運行的是中斷服務(wù)程序?qū)?yīng)的函數(shù)