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