當(dāng)MCU中有兩段或以上程序的時候(第一個程序為用戶BootLoader程序,其他的為APP程序,這個在前期視頻《什么是ISP?什么是IAP》中有講過),APP程序中都需要做中斷向量偏移,那么什么是中斷向量偏移,為什么要做中斷向量偏移?
上一期常見問題《GD32 MCU是如何進入中斷函數(shù)的》和大家講過中斷向量表的概念,當(dāng)一個中斷發(fā)生時,MCU會根據(jù)中斷號去中斷向量表中查找對應(yīng)中斷函數(shù)的入口。那如果APP程序中有中斷發(fā)生,MCU還在0x08000000地址開始的地方去找中斷函數(shù)入口顯然是不行的,因為找到的中斷函數(shù)入口對應(yīng)的是BootLoader中斷函數(shù),跳轉(zhuǎn)過去的話程序就運行異常了,這時候就需要做中斷向量偏移:即讓MCU從0x08000000偏移一段長度的地址開始去查找向量表。
比如一段APP程序保存在0x08008000(不會設(shè)置的小伙伴可以參考前期視頻《keil中GD32 MCU IAP中APP的存儲地址如何設(shè)置》),那么就需要MCU去這個地址開始的地方去查APP的向量表,也就是需要偏移0x8000。

那么如何實現(xiàn)中斷向量偏移呢?GD官方庫中提供了一個函數(shù):nvic_vector_table_set

參數(shù)1為中斷向量表基地址,一般選擇NVIC_VECTTAB_FLASH,也就是flash的基地址0x08000000;
參數(shù)2為偏移量,比如這里我們用0x8000。
所以只要在main函數(shù)的第一句調(diào)用下這個函數(shù)就可以實現(xiàn)中斷向量偏移啦:

是不是特別簡單呢?
-
單片機
+關(guān)注
關(guān)注
6076文章
45498瀏覽量
670570 -
mcu
+關(guān)注
關(guān)注
147文章
18933瀏覽量
398468 -
中斷向量
+關(guān)注
關(guān)注
0文章
14瀏覽量
9213 -
GD32
+關(guān)注
關(guān)注
7文章
432瀏覽量
27367
發(fā)布評論請先 登錄
MM32 IAP中斷向量表重定義
ucosiii如何設(shè)置中斷向量偏移
在IAP升級中APP程序的中斷向量表的偏移
ARM中斷向量表與響應(yīng)流程的系列資料詳細說明
一文了解Cortex-M中斷向量表對齊原則
PIC單片機學(xué)習(xí)——中斷向量之陷阱中斷(PIC24EP64GP204)
如何智能設(shè)置中斷向量表?| 簡單實用技能
什么是中斷向量偏移,為什么要做中斷向量偏移?
評論