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