當(dāng)MCU中有兩段或以上程序的時(shí)候(第一個(gè)程序?yàn)橛脩鬊ootLoader程序,其他的為APP程序,這個(gè)在前期視頻《什么是ISP?什么是IAP》中有講過),APP程序中都需要做中斷向量偏移,那么什么是中斷向量偏移,為什么要做中斷向量偏移?
上一期常見問題《GD32 MCU是如何進(jìn)入中斷函數(shù)的》和大家講過中斷向量表的概念,當(dāng)一個(gè)中斷發(fā)生時(shí),MCU會(huì)根據(jù)中斷號去中斷向量表中查找對應(yīng)中斷函數(shù)的入口。那如果APP程序中有中斷發(fā)生,MCU還在0x08000000地址開始的地方去找中斷函數(shù)入口顯然是不行的,因?yàn)檎业降闹袛嗪瘮?shù)入口對應(yīng)的是BootLoader中斷函數(shù),跳轉(zhuǎn)過去的話程序就運(yùn)行異常了,這時(shí)候就需要做中斷向量偏移:即讓MCU從0x08000000偏移一段長度的地址開始去查找向量表。
比如一段APP程序保存在0x08008000(不會(huì)設(shè)置的小伙伴可以參考前期視頻《keil中GD32 MCU IAP中APP的存儲(chǔ)地址如何設(shè)置》),那么就需要MCU去這個(gè)地址開始的地方去查APP的向量表,也就是需要偏移0x8000。
那么如何實(shí)現(xiàn)中斷向量偏移呢?GD官方庫中提供了一個(gè)函數(shù):nvic_vector_table_set
參數(shù)1為中斷向量表基地址,一般選擇NVIC_VECTTAB_FLASH,也就是flash的基地址0x08000000;
參數(shù)2為偏移量,比如這里我們用0x8000。
所以只要在main函數(shù)的第一句調(diào)用下這個(gè)函數(shù)就可以實(shí)現(xiàn)中斷向量偏移啦:
是不是特別簡單呢?
-
單片機(jī)
+關(guān)注
關(guān)注
6035文章
44554瀏覽量
634631 -
mcu
+關(guān)注
關(guān)注
146文章
17123瀏覽量
350980 -
中斷向量
+關(guān)注
關(guān)注
0文章
14瀏覽量
8941 -
GD32
+關(guān)注
關(guān)注
7文章
403瀏覽量
24328
發(fā)布評論請先 登錄
相關(guān)推薦
評論