關(guān) 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設(shè)計(jì)應(yīng)用 > Windows9x/NT及2000下中斷驅(qū)動程序的統(tǒng)一化處理

        Windows9x/NT及2000下中斷驅(qū)動程序的統(tǒng)一化處理

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

          (2)公用程序

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

          (3)大量例程

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

        3 WinDriver的驅(qū)動程序編程模式原理

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

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

          (1) WD_Open()――獲得驅(qū)動程序(指Windrvr.vxd或Windrvr.sys)的句柄,它實(shí)際上是調(diào)用了CreateFile()API函數(shù),在程序開始時(shí)必須調(diào)用;

          (2) WD_Close()――釋放驅(qū)動程序的句柄,它實(shí)際上是調(diào)用了CloseHandle()API函數(shù),在程序結(jié)束時(shí)必須調(diào)用;

          (3) WD_CardRegister()――負(fù)責(zé)插卡登記項(xiàng)目的建立和資源分配,資源包括I/O操作、內(nèi)存分配、中斷處理等。它調(diào)用了DeviceIOControl()API函數(shù);

          (4) WD_CardUnRegister()――負(fù)責(zé)插卡登記項(xiàng)目的刪除和資源釋放,與前者相對應(yīng),也調(diào)用了DeviceIOControl()API函數(shù);

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

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

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

        4 具體示例

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



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

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 九台市| 苏尼特左旗| 台中市| 延川县| 保定市| 汝州市| 峨边| 涿鹿县| 广南县| 红桥区| 烟台市| 田东县| 尼木县| 彭山县| 崇信县| 忻州市| 汽车| 肇州县| 崇义县| 固始县| 望江县| 屯门区| 南华县| 孝感市| 溧阳市| 临漳县| 双牌县| 铜山县| 城固县| 鱼台县| 司法| 沂南县| 凯里市| 武川县| 公安县| 若尔盖县| 疏附县| 辉南县| 明溪县| 扬州市| 义马市|