對外設進行
i/o操作實際上也就是讀寫外設的暫存器,而我們通常使用的x86或者arm處理器在硬體上決定了wince系統啟動後,無法直接訪問實體地址,因此需要做一些工作來實現i/o操作.
首先要理解
windowsce
下的位址對映機制。
cpu硬體上的區別導致位址對映也不同。mips和sh
x處理器,不採用mmu,直接在cpu和核心裡定義
1g的實體地址;而x86和arm帶有
mmu單元,在
oemaddresstable
中定義實體地址到虛擬位址間的對映關係或者是os啟動後呼叫
和來實現從虛擬位址到實體地址的靜態對映.經過靜態對映的位址,可以由作業系統核心用於
isr訪問裝置。如果我們要在應用程式中訪問外設,必須在實體地址和虛擬位址間建立動態對映關係,我們可以使用
virtualalloc
和virtualcopy
(或者直接呼叫
mmmapiospace
函式)來實現。
其次,如果是操作通過匯流排掛接的
i/o或者儲存器,必須先把匯流排位址轉化成
cpu上的系統位址,再做實體地址到虛擬位址的對映。這裡需要查
cpu的
datasheet
,找出所要操作的i/o位址.先呼叫
haltranslatebusaddress( )把匯流排位址轉化成
cpu上的系統位址,
再呼叫mmmapiospace
函式實現虛實對映;也可以使用
transbusaddrtovirtual
()直接把匯流排上的位址轉化成系統的虛擬位址。
第三,在一般的應用程式中訪問
i/o是訪問它的快取段虛擬位址,而驅動中必須訪問無快取段虛擬位址。簡單來說無快取段虛擬位址
=快取段虛擬位址
+0x20000000。
總結起來,如果是
wince
核心(如hal)訪問外部
i/o,只需要在
oemaddresstable
中定義實體地址到虛擬位址間的對映關係就可以了;如果是應用程式或者驅動要訪問
i/o,要做的工作包括:1。在
cpu實體地址和虛擬位址間做乙個動態對映,
2。對虛擬位址進行操作。
Windows CE5 0 下I O操作基礎 1
對外設進行 i o 操作實際上也就是讀寫外設的暫存器,而我們通常使用的x86或者arm處理器在硬體上決定了wince系統啟動mmu後,os無法直接訪問實體地址,因此需要做一些工作來實現i o操作.其次,如果是操作通過匯流排掛接的 i o 或者儲存器,必須先把匯流排位址轉化成 cpu 上的系統位址,再...
多執行緒下的IO操作
今天考慮優化專案中檔案操作,專案中有許多批量刪除檔案的操作,當檔案很多時,刪除操作會比較費時 1s 2s的時間也顯得有點慢了 更何況10s以上,想要通過多執行緒來同時處理多個檔案的刪除,在程式中使用了threadpool和parallel想要加速刪除,但是效果並沒有預期的明顯,總耗時甚至還有所提公升...
Windows CE下AD驅動設計與實現
本文 http developer.51cto.com art 200907 136858.htm 引言 windows ce.net 是乙個32位 多工 多執行緒的完全搶占式的實時作業系統。它提供了眾多強大工具適應於快速構建新一代記憶體少 體積小的智慧型裝置,如工業控制器 手持式裝置等。該系統的特...