WinCE下的地址對映以及暫存器訪問
阿新 • • 發佈:2018-11-13
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!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
wince5.0下可以使用CreateBusAccessHandle(匯流排登錄檔路徑)+BusTransBusAddrToVirtual來實現匯流排實體地址到系統虛擬地址的直接變換。