儲存器對映是指把晶元中或晶元外的flash,ram,外設,bootblock等進行統一編址。即用位址來表示物件。這個位址絕大多數是由廠家規定好的,使用者只能用而不能改。使用者只能在掛外部ram或flash的情況下可進行自定義。
arm7tdmi的儲存器對映可以有0x00000000~0xffffffff的空間,即4g的對映空間,但所有器件加起來肯定是填不滿的。一般來 說,0x00000000依次開始存放flash——0x00000000,sram——0x40000000,bootblock,外部儲存器 0x80000000,vpb(低速外設位址,如gpio,uart)——0xe0000000,ahb(高速外設:向量中斷控制器,外部儲存器控制器) ——從0xffffffff回頭。他們都是從固定位置開始編址的,而占用空間又不大,如ahb只佔2mb,所以從中間有很大部分是空白區域,使用者若使用這 些空白區域,或者定義野指標,就可能出現取指令中止或者取資料中止。
由於系統在上電復位時要從0x00000000 開始執行,而第一要執行的就是廠家固化在**裡的bootblock,這是判斷執行哪個儲存器上的程式,檢查使用者**是否有效,判斷晶元是否加密,晶元是 否iap(在應用程式設計),晶元是否isp(在系統程式設計),所以這個bootblock要首先執行。而晶元中的bootblock不能放在flash的頭 部,因為那要存放使用者的異常向量表的,以便在執行、中斷時跳到這來找入口,所以bootblock只能放在flsah尾部才能好找到,呵呵。而arm7的 各晶元的flash大小又不一致,廠家為了bootblock在晶元中的位置固定,就在編址的2g靠前編址的位置虛擬劃分乙個區域作為bootblock 區域,這就是重對映,這樣訪問<2g即<0x80000000的位置時,就可以訪問到在flash尾部的bootblock區了。
bootblock執行完就是要執行使用者自己寫的啟動**了,而啟動**中最重要的就是異常向量表,這個表是放在flash的頭部首先執行的,而異常向量 表中要處理多方面的事情,包括復位、未定義指令、軟中斷、預取指中止、資料中止、irq(中斷) ,fiq (快速中斷),而這個異常向量表是總表,還包括許多分散的異常向量表,比如在外部儲存器,bootblock,sram中固化的,不可能都由使用者直接定 義,所以還是需要重對映把那些異常向量表的位址映到總表中。
ARM的儲存器對映與儲存器重對映機制
arm的儲存器對映與儲存器重對映機制 今天終於明白了arm的儲存器對映與儲存器重對映機制,我覺得這一切都是為了中斷向量得到有效的執行啊。下面可以進一步了學習啦!先前在課上在聽老師講arm的儲存器對映與儲存器重對映時,聽明白了arm的儲存器對映是怎麼個回事!1.儲存器對映 處理器產生的位址按其某種規則...
儲存器的重對映
儲存器的重對映的原因是什麼?重對映到底是怎樣進行對映的?如果不進行重對映會有什麼影響?通常系統啟動都是從0位址處開始,但是為了支援不同的儲存介質,不同的儲存介質被分配了乙個非0位址區域。這就是為什麼要進行重對映。因此重對映主要發生在兩種情況下,一系統啟動的過程中 二如果中途遇到需要在不同的儲存器之間...
ARM位址重對映機制
arm體系結構中,系統上電或復位後,處理器將從位址0x0處取第一條指令,因此,上 電的時候,位址0x0處必須是非易失性的rom或flash。但是,為了加快中斷響應速度,方便更改中斷向量表,有時需要把中斷向量表複製到ram中去,然後把ram重新對映到位址0x0處,這就用到了位址重對映機制。因為位址重對...