版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
嵌入式軟件開發(fā)導(dǎo)論同濟(jì)大學(xué)軟件學(xué)院20057.設(shè)備驅(qū)動(dòng)程序開發(fā)主要內(nèi)容概述流驅(qū)動(dòng)接口設(shè)備驅(qū)動(dòng)程序架構(gòu)USBmouse驅(qū)動(dòng)開發(fā)示例WindowsCE系統(tǒng)服務(wù)什么是設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序是與硬件設(shè)備進(jìn)行通信的系統(tǒng)程序。一個(gè)設(shè)備可以是物理設(shè)備,也可以是一個(gè)邏輯實(shí)體。通常,這些實(shí)體需要操作系統(tǒng)對(duì)其進(jìn)行控制,資源管理。設(shè)備驅(qū)動(dòng)程序就是管理這些物理設(shè)備或者虛擬設(shè)備,協(xié)議或者系統(tǒng)服務(wù)的軟件模塊。
對(duì)于每一個(gè)基于WindowsCE的設(shè)備,設(shè)備驅(qū)動(dòng)程序都是必不可少。--譯自MSDN“一般”驅(qū)動(dòng)程序開發(fā)的理解必須使用匯編語(yǔ)言對(duì)端口進(jìn)行讀寫設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)的一部分,難于開發(fā)與調(diào)試。設(shè)備驅(qū)動(dòng)程序控制硬件中斷比較難于處理必須使用匯編語(yǔ)言讀寫端口CEDDK.dll提供APIs與硬件進(jìn)行通信HalGetBusDataREAD_PORT_UCHARWRITE_REGISTER_ULONG對(duì)于邏輯設(shè)備驅(qū)動(dòng)程序,采用Win32APIs從硬件獲取數(shù)據(jù)設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)的一部分,難于開發(fā)與調(diào)試對(duì)于UNIX或者是Windows9x,設(shè)備驅(qū)動(dòng)程序是與操作系統(tǒng)映像連接的,并運(yùn)行于系統(tǒng)內(nèi)核態(tài)。對(duì)于windowsCE,大多數(shù)的設(shè)備驅(qū)動(dòng)程序運(yùn)行于用戶態(tài),簡(jiǎn)單的來(lái)說(shuō)就是一個(gè)DLL文件。設(shè)備驅(qū)動(dòng)程序控制硬件大多數(shù)的設(shè)備驅(qū)動(dòng)程序用來(lái)控制硬件。對(duì)于某些硬件,是沒有驅(qū)動(dòng)的。CPU內(nèi)存對(duì)于虛擬設(shè)備驅(qū)動(dòng)程序,沒有物理設(shè)備。文件系統(tǒng)驅(qū)動(dòng)程序RAMdisk中斷有時(shí)難于處理WindowsCE提供邏輯中斷(SYSINTRs)中斷由一個(gè)用戶態(tài)的線程進(jìn)行處理(IST)為什么應(yīng)當(dāng)寫驅(qū)動(dòng)程序?當(dāng)我們?cè)O(shè)計(jì)硬件時(shí),就需要提供這一硬件的驅(qū)動(dòng)軟件。硬件OEM廠商不提供基于WindowsCE的硬件驅(qū)動(dòng),但是提供硬件的規(guī)格說(shuō)明。對(duì)于一個(gè)現(xiàn)有硬件驅(qū)動(dòng)的功能進(jìn)行擴(kuò)展。驅(qū)動(dòng)分類—整體
WindowsCE整體上將設(shè)備驅(qū)動(dòng)分為三種:內(nèi)置驅(qū)動(dòng)總線流接口內(nèi)置驅(qū)動(dòng)動(dòng)硬件所必必須的驅(qū)驅(qū)動(dòng)程序序,這些些驅(qū)動(dòng)程程序通常常由設(shè)計(jì)計(jì)OEM廠商進(jìn)行行設(shè)計(jì)。。如:鍵盤,觸觸摸屏,,音頻設(shè)設(shè)備??赡懿恢еС忠话惆愕尿?qū)動(dòng)動(dòng)接口,,也有可可能帶有有擴(kuò)展的的接口或或者完全全提供一一個(gè)用戶戶自定義義的接口口。內(nèi)置驅(qū)動(dòng)動(dòng)通常需需要針對(duì)對(duì)具體的的操作系系統(tǒng)進(jìn)行行小幅改改動(dòng)??偩€驅(qū)動(dòng)動(dòng)管理系統(tǒng)統(tǒng)總線如如PCI總線等。。PCMCIA與CompactFlash也在其列列。負(fù)責(zé)處理理總線上上硬件的的詢問(wèn),,以及資資源的分分配。同時(shí)也請(qǐng)請(qǐng)求設(shè)備備管理器器為總線線上的硬硬件安裝裝適當(dāng)驅(qū)驅(qū)動(dòng)程序序。驅(qū)動(dòng)分類類–詳細(xì)AudioDriversBatteryDriversBlockDriversBluetoothHCITransportDriverDirect3DDeviceDriverInterfaceDirectDrawDisplayDriversDisplayDriversDVD-VideoRendererIEEE1394DriversKeyboardDriversNotificationLEDDriversParallelPortDriversPCCardDriversPrinterDriversSerialPortDriversSmartCardDriversStreamInterfaceDriversTouchScreenDriversUSBDrivers參見文檔檔:DriverDevelopment->DriverCategories驅(qū)動(dòng)的加加載過(guò)程程大多數(shù)的的設(shè)備驅(qū)驅(qū)動(dòng)由設(shè)設(shè)備管理理器(Device.exe)進(jìn)程在系系統(tǒng)啟動(dòng)動(dòng)時(shí)進(jìn)行行加載。。另一方面面,其中中一部分分內(nèi)置驅(qū)驅(qū)動(dòng)程序序由GWES.exe進(jìn)行加載載。這些些驅(qū)動(dòng)包包括顯示示器驅(qū)動(dòng)動(dòng)(DDI.dll)、、鍵盤驅(qū)動(dòng)動(dòng)、鼠標(biāo)標(biāo)驅(qū)動(dòng)、、觸摸屏屏驅(qū)動(dòng)等等。驅(qū)動(dòng)的加加載過(guò)程程當(dāng)Device.exe對(duì)設(shè)備驅(qū)驅(qū)動(dòng)程序序進(jìn)行安安裝時(shí)將將在注冊(cè)冊(cè)表的[HKEY_LOCAL_MACHINE]\Drivers項(xiàng)下檢查查一個(gè)字字符串,,其值為為RootKey,傳統(tǒng)地地,其名名字為BuiltIn。然后設(shè)備備管理器器在進(jìn)行行初始化化時(shí)使用用注冊(cè)信信息檢查查器為它它需要安安裝的各各個(gè)驅(qū)動(dòng)動(dòng)讀取值值為RootKey的鍵。驅(qū)動(dòng)的加加載過(guò)程程驅(qū)動(dòng)的加加載過(guò)程程安裝DLL,給每一個(gè)個(gè)驅(qū)動(dòng)創(chuàng)創(chuàng)建一個(gè)個(gè)Active鍵,然后后調(diào)用ActivateDevice或者ActivateDeviceEx將DLL注冊(cè)為系系統(tǒng)中的的一個(gè)設(shè)設(shè)備驅(qū)動(dòng)動(dòng)程序。。ActivateDevice在[HKEY_LOCAL_MACHINE\Drivers\Active下創(chuàng)建一一個(gè)新的的鍵值。。驅(qū)動(dòng)的加加載過(guò)程程驅(qū)動(dòng)加載載API設(shè)備驅(qū)動(dòng)動(dòng)程序也也能通過(guò)過(guò)應(yīng)用程程序進(jìn)行行手動(dòng)的的安裝,,這是ActivateDeviceEx的一個(gè)首首選的功功能。安裝驅(qū)動(dòng)動(dòng)一個(gè)更更老的方方法是使使用RegisterDevice與DeregisterDevice主要內(nèi)容容概述流驅(qū)動(dòng)接接口設(shè)備驅(qū)動(dòng)動(dòng)程序架架構(gòu)USBmouse驅(qū)動(dòng)開發(fā)發(fā)示例WindowsCE系統(tǒng)服務(wù)務(wù)什么是流流接口流接口驅(qū)驅(qū)動(dòng)包括括所有提提供流接接口函數(shù)數(shù)的驅(qū)動(dòng)動(dòng)程序,,不管由由這個(gè)驅(qū)驅(qū)動(dòng)控制制的設(shè)備備是什么么類型。。典型的流流接口驅(qū)驅(qū)動(dòng)程序序有:文件系統(tǒng)統(tǒng)驅(qū)動(dòng)(iostream,fstream)COM,LPT使用流接接口hSer=CreateFile(TEXT(“COM1:”),GENERIC_READ,0,NULL,OPEN_EXSITING,0,NULL);rc=ReadFile(hSer,&ch,1,&cBytes,NULL);TransmitCommChar(hSer,‘a(chǎn)’);CloseHandle(hSer);直接使用用Win32文件系統(tǒng)統(tǒng)API。。創(chuàng)建一個(gè)個(gè)流驅(qū)動(dòng)動(dòng)程序?qū)懸粋€(gè)導(dǎo)導(dǎo)出具體體流接口口的DLL編譯設(shè)備備驅(qū)動(dòng)程程序?qū)ψ?cè)表表進(jìn)行配配置流接口函函數(shù)函數(shù)名說(shuō)明XXX_Close關(guān)閉以hOpenContext標(biāo)識(shí)的設(shè)備上下文。XXX_Deinit由設(shè)備管理器調(diào)用來(lái)刪除對(duì)某一設(shè)備的初始化信息。XXX_Init由設(shè)備管理器調(diào)用來(lái)對(duì)某一設(shè)備進(jìn)行初始化。XXX_IOControl向設(shè)備發(fā)送命令XXX_Open打開一個(gè)設(shè)備以進(jìn)行讀、寫或者既讀又寫。當(dāng)應(yīng)用調(diào)用CreateFile來(lái)打開某一個(gè)設(shè)備文件名時(shí)將間接地調(diào)用這一個(gè)函數(shù)。XXX_PowerDown停止向設(shè)備供電。只有在軟件控制下關(guān)機(jī)的設(shè)備上才可用。XXX_PowerUp恢復(fù)向設(shè)備供電XXX_Read從設(shè)備讀取數(shù)據(jù)XXX_Seek在設(shè)備中移動(dòng)數(shù)據(jù)指針XXX_Write向設(shè)備寫數(shù)據(jù)構(gòu)建設(shè)備備驅(qū)動(dòng)程程序構(gòu)建設(shè)備備驅(qū)動(dòng)程程序與構(gòu)構(gòu)建一個(gè)個(gè)DLL一樣簡(jiǎn)單單??梢允褂糜肞latformBuilder與EVC++。只需創(chuàng)建建一個(gè)WindowsCEDLL項(xiàng)目,輸出適當(dāng)?shù)牡娜肟邳c(diǎn),然然后編寫代碼碼。常犯的一個(gè)錯(cuò)錯(cuò)誤是沒有將將入口點(diǎn)聲明明為externC,因此C++編譯器就不能能處理輸出的的函數(shù)名。注冊(cè)表設(shè)置在Project.reg中:[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Sample]"Dll"="mydriver.Dll""Prefix"="DEM""Index"=dword:1"Order"=dword:0"FriendlyName"="DemoDriver""Ioctl"=dword:0注冊(cè)表設(shè)置Order給所有的驅(qū)動(dòng)動(dòng)設(shè)置相對(duì)安安裝順序。Order為0的驅(qū)動(dòng)先先安裝,依次次安裝Order為1,2,……的驅(qū)動(dòng)。Oder可以讓開發(fā)者者保證有相到到依賴關(guān)系的的多個(gè)驅(qū)動(dòng)以以適當(dāng)?shù)捻樞蛐蜻M(jìn)行安裝。。Index指定在文件系系統(tǒng)中的驅(qū)動(dòng)動(dòng)名的數(shù)字部部分。在默認(rèn)認(rèn)情況下,帶帶有前綴COM的驅(qū)動(dòng)在文件件系統(tǒng)中分配配名字為COM1,下一個(gè)即為COM2。為了保證驅(qū)動(dòng)動(dòng)總是安裝成成COM2,必須提供Index=2。演示:使用emulator編寫一個(gè)流接接口驅(qū)動(dòng)程序序并使用它驅(qū)動(dòng)是如何工工作的WhenCE啟動(dòng)時(shí),Device.exe根據(jù)注冊(cè)表中中的設(shè)置安裝裝所有的驅(qū)動(dòng)動(dòng)程序。當(dāng)安裝mydriver.dll時(shí),device.exe調(diào)用DEM1_Init。Application程序調(diào)用CreateFile(“DEM1”…)驅(qū)動(dòng)是如何工工作的(2)Coredll.dll處理API調(diào)用并切換到到device.exeDevice.exe調(diào)用mydriver.dll的DEM1_Open。CreateFile返回DEM1_Open的retval設(shè)備功能棧硬件WindowsCEDDKAPI設(shè)備驅(qū)動(dòng)程序序設(shè)備管理器(device.exe)應(yīng)用程序主要內(nèi)容概述流驅(qū)動(dòng)接口設(shè)備驅(qū)動(dòng)程序序架構(gòu)USBmouse驅(qū)動(dòng)開發(fā)示例例WindowsCE系統(tǒng)服務(wù)驅(qū)動(dòng)架構(gòu)驅(qū)動(dòng)的類型內(nèi)置與流安裝裝機(jī)制通常內(nèi)置驅(qū)動(dòng)動(dòng)程序根據(jù)注注冊(cè)鍵值安裝裝在GWES進(jìn)程空間總線驅(qū)動(dòng)由Device.exe根據(jù)鍵值進(jìn)行行安裝可安裝的流驅(qū)驅(qū)動(dòng)或其它驅(qū)驅(qū)動(dòng)由Device.exe根據(jù)總線驅(qū)動(dòng)動(dòng)或注冊(cè)檢查查器進(jìn)行安裝裝。設(shè)備管理器用戶級(jí)進(jìn)程繼繼續(xù)運(yùn)行與內(nèi)核、注冊(cè)冊(cè)表交互的單單獨(dú)應(yīng)用程序序,以及流接接口驅(qū)動(dòng)DLL。提供ActivateDevice與DeactivateDeviceAPI。。設(shè)備管理器包括IO資源管理器安裝注冊(cè)表檢檢查器(RegEnum.dll),并由這一個(gè)注注冊(cè)表檢查器器根據(jù)注冊(cè)表表進(jìn)行驅(qū)動(dòng)的的安裝提供電源通知知回調(diào)函數(shù)跟蹤所有已安安裝的驅(qū)動(dòng)程程序,給設(shè)備備接口發(fā)出拉拉入或刪除的的通知設(shè)備管理器設(shè)備驅(qū)動(dòng)程序序的安裝過(guò)程程DEVICE.EXEKernelI/OResourceManager(partofDevice.exe)REGENUM.DLLPCIBUS.DLLloadsloadsloadsDEVICE.EXEI/OResourceManager(partofDevice.exe)REGENUM.DLLPCIBUS.DLL注冊(cè)表枚舉器器注冊(cè)枚舉器是是RegEnum.dllDevice.exe根據(jù)HKEY_LOCAL_MACHINE\Drivers\RootKey安裝注冊(cè)枚舉舉器注冊(cè)枚舉器給給每一個(gè)要安安裝的驅(qū)動(dòng)程程序掃描表項(xiàng)項(xiàng)注冊(cè)枚舉器是是可重入的,,并支持分級(jí)級(jí)使用當(dāng)注冊(cè)枚舉器器卸載時(shí),同同時(shí)也御載它它安裝的所有有信息注冊(cè)枚舉器根根據(jù)Order,檢查緊挨著傳傳給它的鍵的的下一級(jí)鍵值值。注冊(cè)枚舉器對(duì)對(duì)每一個(gè)找到到的子鍵調(diào)用用ActivateDeviceExActivateDeviceEx由Device.exe提供總線驅(qū)動(dòng)程序序當(dāng)安裝設(shè)備備驅(qū)動(dòng)時(shí)調(diào)用用ActivateDeviceExActivateDeviceEx也在RAM工作區(qū)鎖定流流接口驅(qū)動(dòng)程程序這可以防止代代碼頁(yè)被丟棄棄注冊(cè)檢查器對(duì)對(duì)找到的每一一個(gè)內(nèi)置子鍵鍵調(diào)用ActivateDeviceExActivateDeviceEx安裝驅(qū)動(dòng)并更更新注冊(cè)表接口類驅(qū)動(dòng)程序的接接口有以下特特征每一個(gè)Iclass有一個(gè)GUID,一個(gè)名字GUID描述類設(shè)備接接口Name描述接口的實(shí)實(shí)例COM1:,DSK1:等等提供一個(gè)驅(qū)動(dòng)動(dòng)接口在注冊(cè)表中的的Iclass子鍵驅(qū)動(dòng)程序發(fā)布布接口–AdvertiseInterface應(yīng)用程序訪問(wèn)問(wèn)接口–RequestDeviceNotifications每個(gè)已有的接接口的預(yù)定義義GUIDA32942B7-920C-486b-B0E6-92A702A99B35I/O資源管理(IORM)IORM是設(shè)備管理器器必備的部分分跟蹤可用I/O資源(IRQ與I/O基地址)OEM為內(nèi)置設(shè)備預(yù)預(yù)分配的資源源當(dāng)在總線上安安裝一個(gè)客戶戶驅(qū)動(dòng)時(shí),總總線驅(qū)動(dòng)請(qǐng)求求資源ResourceReleaseResourceRequestResourceCreateList當(dāng)存在沖突時(shí)時(shí)IORM調(diào)用ResourceRequest失敗注冊(cè)表幫助例例程從注冊(cè)表中讀讀取資源初始始化信息OpenDeviceKeyDDKReg_GetIsrInfoDDKReg_GetWindowInfoDDKReg_GetPciInfo在COREDLL的API在<devload.h>and<ddkreg.h>的函數(shù)原型在public\common\oak\drivers中的例子wavedev\pdd\es1371\wavepdd.cpp->GetRegistryConfig電源管理電源管理器靈活的系統(tǒng)級(jí)級(jí)與外設(shè)級(jí)電電源管理使設(shè)備智能化化地管理它們們的電源在設(shè)備與系統(tǒng)統(tǒng)或應(yīng)用之間間充當(dāng)協(xié)調(diào)者者使OEM修改調(diào)用PowerOffSystem()的相關(guān)代碼電源管理系統(tǒng)級(jí)電源狀狀態(tài)設(shè)備(外設(shè))級(jí)電源狀態(tài)態(tài)打開系統(tǒng)空閑用戶空閑掛起D0全供電D3睡眠D1降級(jí)模式D4關(guān)閉D2備用模式電源管理器架架構(gòu)驅(qū)動(dòng)電源管管理器器(pm.dll)PMAPIs應(yīng)用程程序通知消消息隊(duì)隊(duì)列驅(qū)動(dòng)APIs應(yīng)用API物理內(nèi)內(nèi)存64MBRAM32MBFlashDbgSerialPort2GBUser512MBUncached512MBCached64MBRAM32MBFlash64MBRAM32MBFlash物理內(nèi)內(nèi)存內(nèi)核虛虛擬地地址Reserved04000000820000008000000080000000A0000000C00000000NotUsedSlot0Slot3264KB32MB64MB2GB3GB4GBMemorymappedfilesAbove2G-3GMappedtophysicalmemoryVirtualaddressspaceSlot1Slot32NULLpointers虛擬地地址空空間512MCached
512MNon-Cached
0x800000000xA0000000AccessableviaMmMapiIoSpace內(nèi)存管管理函函數(shù)設(shè)備驅(qū)驅(qū)動(dòng)程程序是是用戶戶態(tài)模模塊必須將將物理理內(nèi)存存映射射成虛虛擬內(nèi)內(nèi)存VirtualAlloc,VirtualFree:預(yù)留,釋放放虛擬擬內(nèi)存存MEM_RESERVEVirtualCopy:將一個(gè)個(gè)物理理內(nèi)存存區(qū)域域映射射到一一個(gè)虛虛擬內(nèi)內(nèi)存區(qū)區(qū)域PAGE_NOCACHEPAGE_PHYSICAL驅(qū)動(dòng)的的內(nèi)存存訪問(wèn)問(wèn)與映映射MapPtrToProcess將一個(gè)個(gè)地址址空間間的指指針映映射成成另外外一個(gè)個(gè)指針針GetCurrentProcess/SetProcPermissions重新找找回進(jìn)進(jìn)程ID用于MapPtrToProcess函數(shù)MmMapIoSpace將一個(gè)個(gè)物理理地址址空間間映射射成一一個(gè)不不分頁(yè)頁(yè)的,,由進(jìn)進(jìn)程決決定的的地址址空間間CEDDKCEv2.1x以及后后來(lái)的的版本本支持持獨(dú)立立于平平臺(tái)的的I/O配置讓OEM以及驅(qū)驅(qū)動(dòng)開開發(fā)人人員使使用它它們CEDDK.DLL總線管管理內(nèi)存管管理I/O管理從NTDDK拿來(lái)的的CEDDKAPI直到V2.12以后的的版本本才有有文檔檔但在大大多數(shù)數(shù)V2.00版中都都有CEDDK簡(jiǎn)介設(shè)備驅(qū)驅(qū)動(dòng)使使用CEDDK正常開開發(fā)的的驅(qū)動(dòng)動(dòng)是跨跨平臺(tái)臺(tái)二進(jìn)進(jìn)制兼兼容的的跨CPU的源代代碼兼兼容設(shè)備管管理器器設(shè)備驅(qū)驅(qū)動(dòng)CEDDK.DLL硬件CEDDK內(nèi)容部分函示例總線管理HalGetBusDataByOffset()HalGetBusData()HalSetBusDataByOffset()HalSetBusData()HalTranslateBusAddress()HalTranslateSystemAddress()內(nèi)存管理MmMapIOSpace–MmUnmapIOSpaceHalAllocateCommonBufferI/O存取
XXXX=>UCHAR/USHORT/ULONGREAD_REGISTER_XXXXWRITE_REGISTER_XXXXREAD_PORT_XXXXWRITE_PORT_XXXX中斷架架構(gòu)中斷只只是異異常處處理的的一部部分在內(nèi)核核代碼碼中被被獲取取在恢復(fù)復(fù)到用用戶態(tài)態(tài)之間間進(jìn)行行處理理但是硬硬件是是獨(dú)立立于操操作系系統(tǒng)的的CE使用二二階段段中斷斷服務(wù)務(wù)模式式少量的的代碼碼進(jìn)行行中斷斷的記記錄調(diào)度中中斷服服務(wù)程程序代代碼進(jìn)進(jìn)行處處理操作系系統(tǒng)提提供API來(lái)使能能IRQ信號(hào),,設(shè)置置中斷斷的優(yōu)優(yōu)先級(jí)級(jí),等等等。。與硬件件有關(guān)關(guān)的操操作在在OAL,以及設(shè)設(shè)備驅(qū)驅(qū)動(dòng)代代碼中中進(jìn)行行。關(guān)于ISR與IST的一些些解解釋IST是老的的用戶戶模式式代碼碼有完整整的CE.NETAPI與CRT庫(kù)CE.NET調(diào)度程程序根根據(jù)線線程的的優(yōu)先先級(jí)控控制IST的執(zhí)行行運(yùn)行態(tài)態(tài)綁定定到SYSINTR從異常常處理理函數(shù)數(shù)調(diào)用用ISR沒有操操作系系統(tǒng)服服務(wù)堆??湛臻g大大小有有限可設(shè)置置為可可重入入的(在OAL進(jìn)行設(shè)設(shè)置)MIPS,SHx匯編語(yǔ)語(yǔ)言ISRIRQ優(yōu)先級(jí)級(jí)的設(shè)設(shè)定依依賴于于不同同CPU的系統(tǒng)統(tǒng)架構(gòu)構(gòu)在x86上由PIC硬件進(jìn)進(jìn)行設(shè)設(shè)置在MIPS上用OAL的IntrPriority,IntrMask進(jìn)行設(shè)設(shè)置通過(guò)讓讓IST進(jìn)程推推斷ISR服務(wù),,OAL能夠增增加實(shí)實(shí)時(shí)性性。在CE3.0中,所所有有的的ISR代碼碼都都是是OAL的一一部部分分沒有有特特殊殊的的擴(kuò)擴(kuò)展展IRQ綁定定到到OEMInit的事事件件ID沒有有支支持持PNP,共享享IRQ(PCI總線線)CE.NET通過(guò)過(guò)IRS(IISR)鏈解解決決了了這這些些限限制制。。CE.NET可安安裝裝ISRCE3.0ISR架構(gòu)構(gòu)的的首首選選擴(kuò)擴(kuò)展展DLL代碼碼,在運(yùn)運(yùn)行行時(shí)時(shí)進(jìn)進(jìn)行行綁綁定定源代代碼碼可可以以是是獨(dú)獨(dú)立立于于CPU的一般般用用C編寫寫有一一些些限限制制不能能調(diào)調(diào)用用CRT,WindowsAPI,或其其它它的的DLL不可可推推斷斷的的ISR,或IST發(fā)布布支持持硬硬件件共共IRQ共享享從同同一一個(gè)個(gè)IRQ關(guān)聯(lián)聯(lián)的的不不同同SYSINTRIDIISRCE.NET中斷斷處處理理內(nèi)核核OAL驅(qū)動(dòng)動(dòng)硬件件設(shè)置置事事件件無(wú)中斷異常處函數(shù)ISR更高優(yōu)先級(jí)的中斷PSRSYSINTR_ID被屏屏蔽蔽的的IRQSYSINTR_xxSYSINTR_NOPISTIISR1NKCallIntChain(IRQ)IISRnSYSINTR_CHAINIISR2中斷斷服服務(wù)務(wù)線線程程是內(nèi)內(nèi)置置設(shè)設(shè)備備的的驅(qū)驅(qū)動(dòng)動(dòng)程程序序的的作作戶戶態(tài)態(tài)線線程程進(jìn)行行實(shí)實(shí)際際的的中中斷斷處處理理調(diào)用用CreateEvent創(chuàng)建建一一個(gè)個(gè)與與邏邏輯輯中中斷斷相相關(guān)關(guān)聯(lián)聯(lián)的的事事件件對(duì)對(duì)象象IST在大大多多數(shù)數(shù)時(shí)時(shí)間間里里都都是是處處于于空空閑閑狀狀態(tài)態(tài),,以以內(nèi)內(nèi)核核用用信信號(hào)號(hào)通通知知事事件件對(duì)對(duì)象象時(shí)時(shí)被被喚喚醒醒IST通常常運(yùn)運(yùn)行行的的優(yōu)優(yōu)先先級(jí)級(jí)高高于于普普通通優(yōu)優(yōu)先先級(jí)級(jí),,其其優(yōu)優(yōu)先先級(jí)級(jí)由由CeSetThreadPriority函數(shù)數(shù)設(shè)設(shè)定定中斷斷服服務(wù)務(wù)線線程程InterruptInitialize調(diào)用用InterruptInitialize將事事件件與與ISR的中中斷斷標(biāo)標(biāo)識(shí)識(shí)符符關(guān)關(guān)聯(lián)聯(lián)起起來(lái)來(lái)WaitForSingleObject用來(lái)來(lái)等等待待一一個(gè)個(gè)用用信信號(hào)號(hào)通通知知的的事事件件這一一調(diào)調(diào)用用通通常常放放在在一一個(gè)個(gè)循循環(huán)環(huán)中中,,以以使使和和中中斷斷處處理理時(shí)時(shí),,IST可以回到到這一個(gè)個(gè)調(diào)用等等待下一一個(gè)要處處理的中中斷InterruptDone中斷數(shù)據(jù)據(jù)處理完完以后,,IST必須調(diào)用用InterruptDone函數(shù)使內(nèi)核使使能與這這一個(gè)線線程相關(guān)關(guān)的中斷斷典型的IST啟動(dòng)structISTData//DeclaretheStrucuretopasstotheIST{HANDLEhThread;//ISTHandleDWORDsysIntr;//LogicalIDHANDLEhEvent;//handletotheeventtowaitforinterruptvolatileBOOLabort;//flagtotesttoexittheIST};ISTDatag_KeypadISTData;//CreateeventtolinktoISTg_KeypadISTData.hEvent=CreateEvent(NULL,FALSE,FALSE,NULL);//TranslateIRQtoanlogicalID(x86CEPC)g_KeypadISTData.sysIntr=Mapirq2Sysintr(5);//startthethreadg_KeypadISTData.hThread=CreateThread(NULL,0,&KeypadIST,&g_KeypadISTData,0,NULL);典型的IST啟動(dòng)//ChangethethreadspriorityCeSetThreadPriority(g_KeypadISTData.hThread,0);//disconnectanypreviouseventfromlogicalIDInterruptDisable(g_KeypadISTData.sysIntr);//ConnectLogicalIDwithEventInterruptInitialize(g_KeypadISTData.sysIntr,g_KeypadISTData.hEvent,NULL,0);設(shè)置IST的優(yōu)先級(jí)級(jí)與以前的的事件斷斷開與ISR關(guān)聯(lián)典型的IST啟動(dòng)DWORDKeypadIST(void*dat){ISTData*pData=(ISTData*)dat;//loopuntiltoldtostopWhile(!pData->abort){//waitfortheinterruptevent...WaitForSingleObject(pData->hEvent,INFINITE)if(pData->abort)break;//Handletheinterrupt...//LetOSknowtheinterruptprocessingisdoneInterruptDone(pData->sysIntr);}Return0;}典型的IST結(jié)束//setabortflagtotruetoletthreadknow//thatitshouldexitg_KeypadISTData.abort=TRUE;//disconnecteventfromlogicalID//thisinternallysetsg_KeypadISTData.sysIntrwhichinturn//setsg_KeypadISTData.hEventthroughthekernelInterruptDisable(g_KeypadISTData.sysIntr);//waitforthreadtoexitWaitForSingleObject(g_KeypadISTData.hEvent,INFINITE);CloseHandle(g_KeypadISTData.hEvent);CloseHandle(g_KeypadISTData.hThread);設(shè)置一個(gè)個(gè)會(huì)導(dǎo)致致IST退出的標(biāo)標(biāo)志總線驅(qū)動(dòng)動(dòng)概覽PCMCIAI82365(ISA)TI-1250(PCI)USBHost多主控制制器OHCI與UHCI(PCI)PCMCIAHostPCMCIA總線驅(qū)動(dòng)動(dòng)有三個(gè)個(gè)主要的的線程狀態(tài)改變變線程(卡的插入入與移除除)中斷線程程(處理卡的的功能性性中斷請(qǐng)請(qǐng)求)回調(diào)線程程(通知事件件相關(guān)的的設(shè)備卡卡)總線驅(qū)動(dòng)動(dòng)支持CardServ消息的一一個(gè)子集集,從回回調(diào)線程程中用回回調(diào)函數(shù)數(shù)發(fā)送中斷以回回調(diào)的形形式發(fā)送送到客戶戶端驅(qū)動(dòng)動(dòng)對(duì)新插入入的卡進(jìn)進(jìn)行掃描描以確定定是否PnP元組,并并與注冊(cè)冊(cè)表中的的相關(guān)項(xiàng)項(xiàng)進(jìn)行比比較如果沒有有發(fā)現(xiàn)相相匹配的的信息,,則候選選的驅(qū)動(dòng)動(dòng)程序就就運(yùn)行與與卡相關(guān)關(guān)的“detect”例程對(duì)卡卡進(jìn)行識(shí)識(shí)別可能顯示示出一個(gè)個(gè)對(duì)話框框詢問(wèn)DLL的名字USBHost兼容USB1.1版完全支持OHCI與UHCI支持所有的的傳輸類型型Isoch,bulk,interrupt,contr
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)藥經(jīng)營(yíng)雇傭合同(2篇)
- 上海市閔行區(qū)24校聯(lián)考2025屆中考猜題生物試卷含解析
- 2025購(gòu)車合同的缺陷條款有些
- 2024年度四川省公共營(yíng)養(yǎng)師之四級(jí)營(yíng)養(yǎng)師基礎(chǔ)試題庫(kù)和答案要點(diǎn)
- 2024年度四川省公共營(yíng)養(yǎng)師之二級(jí)營(yíng)養(yǎng)師通關(guān)試題庫(kù)(有答案)
- 2025借款合同范文條例
- 2025銀行抵押借款合同模板合同范本
- 2025年P(guān)TC陶瓷片項(xiàng)目可行性研究報(bào)告
- 2024-2027年中國(guó)財(cái)富管理行業(yè)市場(chǎng)運(yùn)行現(xiàn)狀及投資戰(zhàn)略研究報(bào)告
- 企業(yè)文化建設(shè)的可行性研究報(bào)告項(xiàng)目進(jìn)度與時(shí)間計(jì)劃
- (完整版)病例演講比賽PPT模板
- 國(guó)開大學(xué)2020年09月1317《社會(huì)工作行政(本)》期末考試參考答案
- 通達(dá)信公式編寫學(xué)習(xí)資料
- 社會(huì)責(zé)任管理體系培訓(xùn)課件
- 房屋結(jié)構(gòu)安全隱患自查排查記錄表
- 統(tǒng)編版四年級(jí)上冊(cè)語(yǔ)文期末總復(fù)習(xí)知識(shí)PPT
- 《有限元分析及應(yīng)用》(曾攀清華大學(xué)出版社)第四章課后習(xí)題答案
- GB/T 9797-2005金屬覆蓋層鎳+鉻和銅+鎳+鉻電鍍層
- 醫(yī)療機(jī)構(gòu)合理用藥的指標(biāo)
- 《網(wǎng)絡(luò)文件提交系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)【論文】12000字》
- 公司倉(cāng)庫(kù)檢查表
評(píng)論
0/150
提交評(píng)論