国产肉体XXXX裸体137大胆,国产成人久久精品流白浆,国产乱子伦视频在线观看,无码中文字幕免费一区二区三区 国产成人手机在线-午夜国产精品无套-swag国产精品-国产毛片久久国产

新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > Windows CE下驅動程序開發(fā)基礎

Windows CE下驅動程序開發(fā)基礎

作者: 時間:2008-05-10 來源:網絡 收藏

本文引用地址:http://m.ptau.cn/article/258078.htm
  在地址轉換后就要將轉換后的地址映射到驅動程序(一般IST和應用程序一樣運行在用戶模式)能夠訪問的虛擬地址空間(0x80000000以下)和ISR能夠訪問的靜態(tài)虛擬地址空間中(0x80000000以上)。例如:

////如果地址屬于物理地址空間

ioPortBase = (PUCHAR)MmMapIoSpace(ioPhysicalBase, Size, FALSE);
TransBusAddrToStatic(Isa, 0, ioPhysicalBase, Size, inIoSpace, ppStaticAddress);


  MmMapIoSpace函數(shù)負責將物理地址映射到驅動程序能夠訪問的虛擬地址空間中,通過源碼分析MmMapIoSpace在內部分別調用:

pVirtualAddress =VirtualAlloc(0, SourceSize, MEM_RESERVE, PAGE_NOACCESS);

VirtualCopy(pVirtualAddress, (PVOID)(SourcePhys >> 8), SourceSize, PAGE_PHYSICAL | PAGE_READWRITE |
(CacheEnable ? 0 : PAGE_NOCACHE));


  VirtualAlloc分配一塊和MemLen一樣大小的虛擬地址空間,因為參數(shù)1為0,所以內核自動分配。一般MemLen小于2MB,所以會在應用程序的地址空間中分配。VirtualCopy負責將硬件設備寄存器的物理地址與VirtualAlloc分配的虛擬地址做一個映射關系,這樣驅動程序訪問PvirtualAddress實際上就是訪問第一個寄存器。因為硬件設備寄存器的物理地址一定是在512MB(CE支持RAM的最大值)以上,所以除了最后的參數(shù)要加PAGE_PHYSICAL外,第二個參數(shù)物理地址也要右移8位(或者除以256)。
 映射硬件寄存器當然PAGE_NOCACHE是必須加的。TransBusAddrToStatic函數(shù)負責將物理地址映射到ISR能夠訪問的靜態(tài)虛擬地址空間中,當出現(xiàn)中斷共享時,ISR要負責訪問硬件設備的某一個寄存器來判斷中斷源,所以將寄存器的物理地址映射到靜態(tài)虛擬地址空間中是必要的(ISR只能訪問靜態(tài)的虛擬地址空間)。所謂靜態(tài)虛擬地址空間是指在OEMAddressTable中定義的虛擬地址空間(當然是0x80000000以上)。在x86平臺一般這個表只定義RAM的物理地址與虛擬地址對應關系,而硬件設備的寄存器地址并不在該表中定義,所以如果要創(chuàng)建一塊靜態(tài)的虛擬地址空間供ISR訪問,必須在此之前調用CreateStaticMapping函數(shù)在0xC4000000到0xE0000000虛擬地址空間中分配。TransBusAddrToStatic函數(shù)在內部就是調用了CreateStaticMapping函數(shù)。注:硬件設備的寄存器地址也可以在OEMAddressTable中定義。

////如果地址屬于IO空間

ioPortBase = (PUCHAR)ioPhysicalBase.LowPart;
*ppStaticAddress=ioPortBase


  這種情況只屬于x86平臺,是IO空間就可以直接訪問,即使是用戶模式。

  SerInit函數(shù)接著初始化SER_INFO結構體成員,之后調用SL_Init函數(shù),這個函數(shù)在ser16550中定義,負責初始化SER16550_INFO結構體,在這個結構體中保存串口8個寄存器的地址。SerInit函數(shù)執(zhí)行完畢后COM_Init函數(shù)創(chuàng)建接收緩沖區(qū),然后調用StartDispatchThread函數(shù)初始化中斷并且創(chuàng)建IST。StartDispatchThread函數(shù)在內部調用InterruptInitialize函數(shù)關聯(lián)SysIntr和Event,然后調用InterruptDone函數(shù)告訴內核當前串口可以中斷處理,接著調用CreateThread函數(shù)創(chuàng)建IST線程。(over吧,再往下說就和串口硬件有關了,看多了沒注釋的代碼我也煩?。。?/p>


[HKEY_LOCAL_MACHINEDriversBuiltInSerial_1]


上一頁 1 2 3 下一頁

評論


相關推薦

技術專區(qū)

關閉