1為什么要對中斷向量表進行重新映射?COREM3權(quán)威指南上講“然而,為了動態(tài)重分發(fā)中斷,CM3允許向量表重定位——從其它地址處開始定位各異常向量。這些地址對應(yīng)的區(qū)域可以是代碼區(qū),但也可以是RAM區(qū)。在RAM區(qū)就可以修改向量的入口地址了?!?。疑惑:1.如果不重新映射的話,中斷向量表的地址應(yīng)該是這樣的:0X00000000是SP;0X00000004是復(fù)位向量;0X00000008是NMI;后面按照中斷編號的順序依次按4遞增。這樣的話,不也能存得下中斷向量表嗎?反正存的是一些函數(shù)指針,占不了多少空間,干嘛還要重新映射到其他的地方呢?2.如果重新映射的話,中斷向量表的入口地址就變成0x08000000了。但是一開始已經(jīng)開辟的那部分空間(0x00000000......)存放的中斷向量表不是就等于沒用嗎?問題一:想要解釋你的疑惑先要明白幾個道理1、無論向量表是否重映射過,復(fù)位后都是從0地址的向量表處獲取SP和復(fù)位入口。2、0地址處的中斷向量表,通常是ROM地址。通常只能通過指定鏈接地址,然后燒錄改寫。3、在一些帶升級功能的產(chǎn)品中,通常分為boot和app兩部分。boot通常出產(chǎn)以后就不再變化,使用0地址向量表,必須通過Jtag之類的工具才能改寫。而boot中帶有下載功能個(USB、串口或SPI),用戶可以根據(jù)需要下載APP。4、注意第2條,APP通常需要自己設(shè)計中斷服務(wù)。如果不重映射,只能再boot處設(shè)計查表程序,通過boot跳轉(zhuǎn),效率不高。而擦寫0地址向量,如果在升級過程中掉電,則boot也無法啟動。因此,需要進入APP后,重映射向量表。問題二:你的理解的對的。然而,0地址處的中斷向量表區(qū)域通常不放代碼。芯片在FLASH地址分配上,也很少有將FLASH地址緊密的排在向量表之后的。因此,并不影響。