<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > Windows9x/NT及2000下中斷驅動(dòng)程序的統一化處理

Windows9x/NT及2000下中斷驅動(dòng)程序的統一化處理

作者: 時(shí)間:2009-05-13 來(lái)源:網(wǎng)絡(luò ) 收藏

  (2)公用程序

  WinDriver提供了pci_scan、pci_dump、pci_diag、isapnp_scan、wdreg、wddebug等多個(gè)公用程序。pci_scan可以給出安裝的PCI卡及系統為它們分配資源的列表;pci_dump則負責得到已安裝的PCI卡的系統配置信息;pci_diag兼有兩者功能;isapnp_scan為用戶(hù)指出了即插即用的ISA插卡的有關(guān)信息;wdreg為用戶(hù)提供了修改注冊表的工具,可以用來(lái)方便地安裝用戶(hù)編寫(xiě)的程序;wddebug則是一個(gè)用于調試用戶(hù)程序的有效工具。

  (3)大量例程

  WinDriver提供了許多例程,使用者可以利用它們來(lái)產(chǎn)生自己驅動(dòng)程序的基本框架。與此同時(shí),在WinDriver提供的在線(xiàn)幫助里,可以查到許多WinDriver封裝好的功能函數。這些函數能夠方便地實(shí)現處理、DMA傳輸、I/O操作、內存映射以及即插即用等功能。而且對于常用的PCI橋芯片,如PLX9050、PLX9060、PLX9080、AMCC5923、AMCC5933、V3、ALTERA、GT64等等,提供了特定的檢測程序和相應的API函數,大大減輕了用戶(hù)的編程難度。

3 WinDriver的驅動(dòng)程序編程模式原理

  WinDriver編程有兩種模式。一種模式是用戶(hù)模式,這種模式實(shí)際上不是讓用戶(hù)來(lái)編驅動(dòng)程序,而是利用軟件自身提供的驅動(dòng)程序Windrvr.vxd和Windrvr.sys,用戶(hù)所面對的只是驅動(dòng)程序給出的相應功能接口;即使是這個(gè)接口,也用高級語(yǔ)言進(jìn)行了很好的封裝,使用十分容易。另一種模式是“核心插入”模式用KernelPlugIn方式進(jìn)行編程,形成.vxd和.sys文件,這是真正意義上的驅動(dòng)程序。當用戶(hù)有特殊的速度要求時(shí),后者是較好的方式。這種方式最快,據Jungo公司的評測報告中講,可以在一秒鐘內處理100,000次,筆者在硬件中嘗試了一下10,000次/秒,獲得了成功。

  對于對操作系統內核了解不多的開(kāi)發(fā)者,用戶(hù)模式無(wú)疑是非常值得推薦的。本文重點(diǎn)即是放在這方面。使用用戶(hù)模式,這里要特別注意以下幾個(gè)功能函數:

  (1) WD_Open()――獲得驅動(dòng)程序(指Windrvr.vxd或Windrvr.sys)的句柄,它實(shí)際上是調用了CreateFile()API函數,在程序開(kāi)始時(shí)必須調用;

  (2) WD_Close()――釋放驅動(dòng)程序的句柄,它實(shí)際上是調用了CloseHandle()API函數,在程序結束時(shí)必須調用;

  (3) WD_CardRegister()――負責插卡登記項目的建立和資源分配,資源包括I/O操作、內存分配、中斷處理等。它調用了DeviceIOControl()API函數;

  (4) WD_CardUnRegister()――負責插卡登記項目的刪除和資源釋放,與前者相對應,也調用了DeviceIOControl()API函數;

  (5) InterruptThreadEnable()-中斷使能,使能后可以接收中斷信號,調用Interrupt_handler()函數對中斷進(jìn)行相應處理。在其中集成了CreateThread()API函數;

  (6) Interrupt_handler()-中斷處理函數,開(kāi)發(fā)者在這里加入自己對硬件的控制代碼。

  (7) InterruptThreadDisable()-使中斷無(wú)效的函數,屏蔽掉中斷信號,不再對其進(jìn)行處理。在其中集成了WaitForSingleObject()和CloseHandle()這兩個(gè)API函數。

4 具體示例

  下面給出一個(gè)用戶(hù)模式的具體示例。用VisualC++6編譯調試通過(guò),在9x和下系統運行良好,在下也能夠穩定運行。windrvr.h和windrvr.vxd、windrvr.sys由軟件提供,這里就不詳述。對于Windows9x系統,注意將windrvr.vxd拷貝到C:WindowsSystemVmm32目錄下;對于Windows系統,注意將windrvr.sys拷貝到C:WINSystem32DRIVERS目錄下。Listen_Interupt.C程序框架如下,該程序實(shí)現了中斷12的截獲:



關(guān)鍵詞: Windows 2000 NT 中斷

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>