ARM位址對映

2022-05-08 21:21:16 字數 1906 閱讀 3038

**:

重對映之後,一般原來的位址依然有效。也就是說,可能兩個位址,對應乙個儲存單元。

arm晶元的位址重對映 對映就是一一對應的意思。重對映就是重新分配這種一一對應的關係。 我們可以把儲存器看成乙個具有輸出和輸入口的黑盒子,如下圖所示,輸入量是位址,輸出的是對應位址上儲存的資料。當然這個黑盒子是由很複雜的半導體電路具現的,具體的實現的方式我們現在不管。儲存單位一般是位元組。這樣,每個位元組的儲存單元對應乙個位址,當乙個合法位址從儲存器的位址匯流排輸入後,該位址對應的儲存單元上儲存的資料就會出現在資料匯流排上面。

圖1 普通的微控制器把可執行**和資料存放到儲存器中。微控制器中的cpu從儲器中取指令**和資料。其中儲存器中每個物理儲存單元與其位址是一一對應而且是不可變的。如下圖,cpu讀取0x00000000位址上儲存單元的過程。

圖2 arm比較複雜。arm晶元與普通微控制器在儲存器位址方面的不同在於:arm晶元中有些物理儲存單元的位址可以根據設定變換。就是說乙個物理儲存單元現在對應乙個位址,經過設定以後,這個儲存單元就對應了另外乙個位址了。圖3是隨意舉了個例子(不要與arm晶元對應),旨在說明位址重對映的過程。圖3表示把0x00000000位址上的儲存單元對映到新的位址0x00000007上。cpu訪問0x00000007就是訪問0x00000000上的物理儲存單元。

圖5 圖5描述示了arm晶元的另外一種對映方式。這個對映可以由使用者決定採用還是不採用(相關**在工程檔案的startup.s中,這個檔案是第三方提供,使用者可以修改)。這個對映主要是為了提高應用程式異常相應得速度。當我們把應用程式存放在片內flash的時候,異常向量表存放在0x00000000~0x0000003f儲存單元內。每次發生異常,cpu從0x00000000~0x0000003f位址上取異常向量。但是對ram的訪問速度遠高於對flash的訪問速度,所以為了提高異常相應速度我們採取以下做法:

step 1:

先把0x00000000~0x0000003f(flash)儲存單元內的異常向量表複製 到0x40000000~0x4000003f(片內ram的最低端64個位元組的儲存單元)範圍內儲存單元中。 

step 2:

把0x40000000~0x4000003f範圍內儲存單元位址重新對映到0x00000000~0x0000003f位址範圍。 這樣做了以後,當異常發生的時候,cpu取異常向量就是從ram區中的異常向量表中區,速度快了。比如復位中斷發生,cpu從位址0x00000000取指令,但此時由於已經過位址重新對映,這個0x00000000被位址轉換器轉換成0x40000000,cpu實際上是取的ram區中0x400000000這個儲存單元內的指令(異常向量)。 當然使用者可以不進行這種對映。片內flash中0x00000000~0x0000003f儲存單元具有一模一樣的異常向量表。只不過不進行這種處理,異常相應速度慢一點。但是這種速度上的差別很多情況下是不必要在意的。

圖中的位址轉換器受控制暫存器menmap的控制,使用者可以設定menmap實現對位址重對映的控制。這個位址轉換器顯然是通過內部硬體電路實現

問題

1.怎麼理解晶元的位址對映?

晶元外接外部ram和外部rom的時候,ram和rom器件都是獨立器件,並沒有位址一說,或者說都只有自己的絕對位址,且從0x00開始。而對於cpu來說,0x00位址只能有1個,所以外接器件掛到cpu上時只能做位址對映,如ram的位址為0x3000 0000, rom位址為0x4000 0000, 這樣cpu就做了統一編址。

2.晶元暫存器是怎麼影響cpu配置的,如uart_control?

在一定程度上,暫存器就可以理解為ram,只不過速度比ram還要快。這裡暫存器還可以細分為通用暫存器,如r0/r1..., 可用於暫存資料,參與邏輯運算等等;另外還有專用暫存器,如串列埠的控制暫存器,每個外設都對應有自己的控制器,程式設計師通過對控制器的讀寫來控制外設的行為。

ARM位址重對映機制

arm體系結構中,系統上電或復位後,處理器將從位址0x0處取第一條指令,因此,上 電的時候,位址0x0處必須是非易失性的rom或flash。但是,為了加快中斷響應速度,方便更改中斷向量表,有時需要把中斷向量表複製到ram中去,然後把ram重新對映到位址0x0處,這就用到了位址重對映機制。因為位址重對...

ARM記憶體對映

主儲存空間 main memory area 6410核心與主儲存空間通過spine匯流排連線,主儲存為位址空間0x0 0x6fffffff,大小為1792mb的一片區域 其中主儲存空間在6410內部劃分為以下幾部分 boot映象區位於6410定址空間的0x0 0x07ffffff 128mb 位置...

ARM記憶體對映

主儲存空間 main memory area boot映象區位於6410定址空間的0x0 0x07ffffff 128mb 位置,這段區域並沒有真正的儲存裝置,實際執行過程中是對映到內部儲存區或靜態儲存區,boot映象區固定起始位址為0x00000000。boot 映象區沒有實際的儲存裝置,只是在一...