WINCE 對實體地址的訪問

2021-09-30 05:17:53 字數 914 閱讀 6054

wince程式設計--對實體地址的訪問

(1)io介面是xscale處理器的外部裝置,對於一般的微控制器,可以直接操作硬體,即通過直接讀寫io埠來訪問硬體.

而對於wicne作業系統,它遮蔽了使用者應用程式對硬體訪問的許可權,只有核心應用程式才可以訪問硬體資源.如果要直接訪問某一址的物理記憶體(對於arm核的mcu,io埠位址通常被對映到物理記憶體中,記憶體和io統一編址)可以採用記憶體對映方法,將該硬體暫存器對映到普通的記憶體空間,像操作記憶體位址一樣操作硬體暫存器.

wince提供了 virtualalloc()和virtualcopy() 函式,

virtualalloc()負責在虛擬記憶體空間內保留一段虛擬記憶體,

virtualcopy()負責把一段物理記憶體和虛擬內在繫結,

這樣最終對物理記憶體的訪問就可以通過虛擬位址來進行了.

(2)

plightreg=(char*)virtualalloc(0,0x400,mem_reserve,page_readwrite)

這樣就分配出乙個mem_reserve型別的儲存器空間,但它並沒有占用實際記憶體空間,而是虛擬的位址空間.

接著將實際的硬體位址(例如led的片選控制訊號位址)對映到前面分配的虛擬位址空間,使用virtualcopy函式建立起兩個位址間的對映關係.**如下:

virtualcopy((pvoid)plightreg,(pvoid)(plightiobaseaddress>>8),0x400,page_readwrite|page_nocache|page_physical)

這裡plightreg是前面分配的虛擬位址空間,而plightiobaseaddress為實際的硬體位址,需要將它右移8位,因為在函式中儲存器分配是以256位為單位的.而後面的選項則是指定了對映位址的屬性—可讀.不緩衝以及硬體實體地址.現在就可以使用虛擬位址訪問原來不能直接訪問的硬體位址了.

Linux下訪問記憶體實體地址

linux核心裡提供的 dev mem驅動,為我們讀寫記憶體實體地址,提供了乙個渠道。下面講述2種利用mem裝置檔案進行實體地址讀寫的方法,一種是裝置驅動的方法,另一種是系統呼叫的方法。首先我們看下mem這個裝置檔案,dev mem是linux下的乙個字元裝置,原始檔是 drivers char m...

Linux下訪問記憶體實體地址

原文 linux核心裡提供的 dev mem驅動,為我們讀寫記憶體實體地址,提供了乙個渠道。下面講述2種利用mem裝置檔案進行實體地址讀寫的方法,一種是裝置驅動的方法,另一種是系統呼叫的方法。首先我們看下mem這個裝置檔案,dev mem是linux下的乙個字元裝置,原始檔是 drivers cha...

Linux 下面對實體地址的訪問

linux核心提供了 dev mem驅動,提供了一種直接訪問記憶體實體地址的方法,具體實施有兩種方法,一是裝置驅動,二是系統呼叫的方法。dev mem驅動的原始檔在drivers char mem.c中。這個檔案還生成了一些常用的字元裝置驅動,表現為 dev zero,dev null等一些特殊的字...