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

那么如何實現中斷向量偏移呢?GD官方庫中提供了一個函數:nvic_vector_table_set

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

是不是特別簡單呢?
-
單片機
+關注
關注
6062文章
44915瀏覽量
646698 -
mcu
+關注
關注
146文章
17824瀏覽量
360184 -
中斷向量
+關注
關注
0文章
14瀏覽量
9074 -
GD32
+關注
關注
7文章
418瀏覽量
25140
發布評論請先 登錄

一個新手對stm32啟動和中斷向量表的理解
MM32 IAP中斷向量表重定義
ucosiii如何設置中斷向量偏移
在IAP升級中APP程序的中斷向量表的偏移
ARM中斷向量表與響應流程的系列資料詳細說明

一文了解Cortex-M中斷向量表對齊原則

PIC單片機學習——中斷向量之陷阱中斷(PIC24EP64GP204)

如何智能設置中斷向量表?| 簡單實用技能

評論