关 闭

新闻中心

EEPW首页>工控自动化>设计应用> Windows9x/NT及2000下中断驱动程序的统一化处理

Windows9x/NT及2000下中断驱动程序的统一化处理

作者: 时间:2009-05-13 来源:网络 收藏

  (2)公用程序

  WinDriver提供了pci_scan、pci_dump、pci_diag、isapnp_scan、wdreg、wddebug等多个公用程序。pci_scan可以给出安装的PCI卡及系统为它们分配资源的列表;pci_dump则负责得到已安装的PCI卡的系统配置信息;pci_diag兼有两者功能;isapnp_scan为用户指出了即插即用的ISA插卡的有关信息;wdreg为用户提供了修改注册表的工具,可以用来方便地安装用户编写的程序;wddebug则是一个用于调试用户程序的有效工具。

  (3)大量例程

  WinDriver提供了许多例程,使用者可以利用它们来产生自己驱动程序的基本框架。与此同时,在WinDriver提供的在线帮助里,可以查到许多WinDriver封装好的功能函数。这些函数能够方便地实现处理、DMA传输、I/O操作、内存映射以及即插即用等功能。而且对于常用的PCI桥芯片,如PLX9050、PLX9060、PLX9080、AMCC5923、AMCC5933、V3、ALTERA、GT64等等,提供了特定的检测程序和相应的API函数,大大减轻了用户的编程难度。

3 WinDriver的驱动程序编程模式原理

  WinDriver编程有两种模式。一种模式是用户模式,这种模式实际上不是让用户来编驱动程序,而是利用软件自身提供的驱动程序Windrvr.vxd和Windrvr.sys,用户所面对的只是驱动程序给出的相应功能接口;即使是这个接口,也用高级语言进行了很好的封装,使用十分容易。另一种模式是“核心插入”模式用KernelPlugIn方式进行编程,形成.vxd和.sys文件,这是真正意义上的驱动程序。当用户有特殊的速度要求时,后者是较好的方式。这种方式最快,据Jungo公司的评测报告中讲,可以在一秒钟内处理100,000次,笔者在硬件中尝试了一下10,000次/秒,获得了成功。

  对于对操作系统内核了解不多的开发者,用户模式无疑是非常值得推荐的。本文重点即是放在这方面。使用用户模式,这里要特别注意以下几个功能函数:

  (1) WD_Open()――获得驱动程序(指Windrvr.vxd或Windrvr.sys)的句柄,它实际上是调用了CreateFile()API函数,在程序开始时必须调用;

  (2) WD_Close()――释放驱动程序的句柄,它实际上是调用了CloseHandle()API函数,在程序结束时必须调用;

  (3) WD_CardRegister()――负责插卡登记项目的建立和资源分配,资源包括I/O操作、内存分配、中断处理等。它调用了DeviceIOControl()API函数;

  (4) WD_CardUnRegister()――负责插卡登记项目的删除和资源释放,与前者相对应,也调用了DeviceIOControl()API函数;

  (5) InterruptThreadEnable()-中断使能,使能后可以接收中断信号,调用Interrupt_handler()函数对中断进行相应处理。在其中集成了CreateThread()API函数;

  (6) Interrupt_handler()-中断处理函数,开发者在这里加入自己对硬件的控制代码。

  (7) InterruptThreadDisable()-使中断无效的函数,屏蔽掉中断信号,不再对其进行处理。在其中集成了WaitForSingleObject()和CloseHandle()这两个API函数。

4 具体示例

  下面给出一个用户模式的具体示例。用VisualC++6编译调试通过,在9x和下系统运行良好,在下也能够稳定运行。windrvr.h和windrvr.vxd、windrvr.sys由软件提供,这里就不详述。对于Windows9x系统,注意将windrvr.vxd拷贝到C:WindowsSystemVmm32目录下;对于Windows系统,注意将windrvr.sys拷贝到C:WINSystem32DRIVERS目录下。Listen_Interupt.C程序框架如下,该程序实现了中断12的截获:



关键词:Windows2000NT中断

评论


相关推荐

技术专区

关闭