地址映射

地址映射

地址映射是為了保證CPU執行指令時可正確訪問存儲單元,需將用戶程式中的邏輯地址轉換為運行時由機器直接定址的物理地址。

基本信息

地址映射結構

物理地址與虛擬地址的映射物理地址與虛擬地址的映射
在Tornado\target\h\vmLib.h檔案
typedefstructphys_mem_desc
{
void*virtualAddr;
void*physicalAddr;
UINTlen;
UINTinitialStateMask;/*maskparametertovmStateSet*/
UINTinitialState;/*stateparametertovmStateSet*/
}PHYS_MEM_DESC;
virtualAddr:你要映射的虛擬地址
physicalAddr:硬體設計時定義的實際物理地址
len;要進行映射的地址長度
initialStateMask:可以初始化的地址狀態:
有如下狀態:
#defineVM_STATE_MASK_VALID0x03
#defineVM_STATE_MASK_WRITABLE0x0c
#defineVM_STATE_MASK_CACHEABLE0x30
#defineVM_STATE_MASK_MEM_COHERENCY0x40
#defineVM_STATE_MASK_GUARDED0x80
不同的CPU晶片類型還有其特殊狀態
initialState:實際初始化的地址狀態:
有如下狀態:
#defineVM_STATE_VALID0x01
#defineVM_STATE_VALID_NOT0x00
#defineVM_STATE_WRITABLE0x04
#defineVM_STATE_WRITABLE_NOT0x00
#defineVM_STATE_CACHEABLE0x10
#defineVM_STATE_CACHEABLE_NOT0x00
同樣不同的CPU晶片類型還有其特殊狀態

初始化結構

在Tornado\target\config\ads860\sysLib.c檔案中:
PHYS_MEM_DESCsysPhysMemDesc[]=
{
{
(void*)LOCAL_MEM_LOCAL_ADRS,
(void*)LOCAL_MEM_LOCAL_ADRS,
LOCAL_MEM_SIZE,
VM_STATE_MASK_VALID|VM_STATE_MASK_WRITABLE|
VM_STATE_MASK_CACHEABLE,
VM_STATE_VALID|VM_STATE_WRITABLE|VM_STATE_CACHEABLE
},
{
(void*)BCSR0,
(void*)BCSR0,
0x00001000,/*4k-BoardControlandStatus*/
VM_STATE_MASK_VALID|VM_STATE_MASK_WRITABLE|
VM_STATE_MASK_CACHEABLE|VM_STATE_MASK_GUARDED,
VM_STATE_VALID|VM_STATE_WRITABLE|VM_STATE_CACHEABLE_NOT|
VM_STATE_GUARDED
},
……
{
(void*)INTERNAL_MEM_MAP_ADDR,
(void*)INTERNAL_MEM_MAP_ADDR,
INTERNAL_MEM_MAP_SIZE,/*64k-InternalMemoryMap*/
VM_STATE_MASK_VALID|VM_STATE_MASK_WRITABLE|
VM_STATE_MASK_CACHEABLE|VM_STATE_MASK_GUARDED,
VM_STATE_VALID|VM_STATE_WRITABLE|VM_STATE_CACHEABLE_NOT|
VM_STATE_GUARDED
},
{
(void*)ROM_BASE_ADRS,
(void*)ROM_BASE_ADRS,
ROM_SIZE,/*Flachmemory*/
VM_STATE_MASK_VALID|VM_STATE_MASK_WRITABLE|
VM_STATE_MASK_CACHEABLE,
VM_STATE_VALID|VM_STATE_WRITABLE|VM_STATE_CACHEABLE_NOT
}
};
上面結構中是預設地址映射。

地址初始化

在Tornado\target\src\config\usrMmuInit.c檔案中
通過函式usrMmuInit使地址映射生效

實現映射

如你定義flash地址為0x04000000開始的8Mbyte地址,則可以如下進行地址映射
{
(void*)0x04000000,
(void*)0x04000000,
0x00800000,/*8m-Flashwindow1*/
VM_STATE_MASK_VALID|VM_STATE_MASK_WRITABLE,
VM_STATE_VALID|VM_STATE_WRITABLE
},

注意

地址映射最小單位為1頁,4K大小,所以len值最小為:0x00001000。

地址映射分類

地址映射也可以成為地址重定位或地址變換,可以分為以下兩類:
靜態重定位
當用戶程式被裝入記憶體時,一次性實現邏輯地址到物理地址的轉換,以後不再轉換(一般在裝入記憶體時由軟體完成)。
動態重定位
在程式運行過程中要訪問數據時再進行地址變換(即在逐條指令執行時完成地址映射。一般為了提高效率,此工作由硬體地址映射機制來完成。由硬體支持,軟體硬體結合完成。硬體上一般需要一對暫存器的支持)。

相關詞條

相關搜尋

熱門詞條

聯絡我們