1. 程式人生 > >WinCE下的地址對映以及暫存器訪問

WinCE下的地址對映以及暫存器訪問

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                 

wince下的地址對映知識點滴

1.如果是在bootloader中訪問裝置暫存器,可以直接操作實體地址。

2.wince啟動後,硬體上ARM和X86體系的處理器啟動了MMU,作業系統只能訪問到虛擬地址,不能直接操作實體記憶體了。但是如果是X86的CPU,由於它的外設I/O埠和儲存器空間分開編址,可以直接嵌入彙編或者使用巨集read_port_xxx,write_port_xxx來讀寫裝置暫存器的實體地址。

3.wince軟體結構裡對應MMU的是一個名為OEMAddressTable的資料結構( 原始檔oeminit.asm中)
,其中建立了實體地址和虛擬地址的 靜態對映關係,也可以在其中改動系統所能識別實體記憶體的大小,以支援大記憶體。

4.我們也可以在wince啟動後呼叫CreateStaticMapping和NKCreateStaticMapping來實現OEMAddressTable中的這種實體地址和虛擬地址的 靜態對映關係。

5.建立了靜態對映關係的虛擬地址只能由核心模式下的程式來操作,例如 ISR。除非你在定製系統時,選擇了full kernal mode,使所有程式都執行在完全核心模式下,這將導致系統不穩定。

6.如果要在驅動程式中訪問裝置暫存器,必須建立 動態虛擬地址對映,可以呼叫MmmapIoSpace函式來實現,或者通過VirtualAlloc和VirtualCopy函式來實現。其實MmmapIoSpace內部就呼叫了後者。

7.在驅動中訪問虛擬地址時,必須是非快取段(位於0xA0000000 到 0xBFFFFFFF )。

8.使用VirtualCopy函式對映實體記憶體時,其lpvSrc引數必須右移8位,且相應的fdwProtect引數必須帶page_physical。

9.如果是ARM體系的處理器,訪問掛在系統總線上的裝置暫存器前,必須先把匯流排地址轉化成 CPU
的地址,通過HalTranslateBusAddress實現兩種實體地址的變換,然後再呼叫MmmapIoSpace函式作虛實地址的轉換。
  wince5.0下可以使用CreateBusAccessHandle(匯流排登錄檔路徑)+BusTransBusAddrToVirtual來實現匯流排實體地址到系統虛擬地址的直接變換。           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述