Windows 9X硬件中断设备驱动程序的开发

2016-01-29 12:42 9 1 收藏

Windows 9X硬件中断设备驱动程序的开发,Windows 9X硬件中断设备驱动程序的开发

【 tulaoshi.com - C语言心得技巧 】

  关键词:控制系统 实时系统 虚拟设备驱动程序 VtoolsD

  一、绪言

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

  在计算机控制领域,随着硬件的发展,一些原本十分复杂的控制算法的设计和仿真变得越来越容易实现。与基于VME、MULTIBUS以及STD总线的平台相比,基于ISA总线的高性能PC工控机(IPC)无疑是近来应用最为广泛的主流产品。这主要得益于IPC与PC的软件兼容性,此外其开放性结构、外围高性能I/O模板的不断涌现以及实进工业网络的迅速发展都为IPC创造了有利的发展环境。可以说,IPC的时代已经到来。此外,在当今的计算机控制领域中,控制软件是否基于Windows平台已经成为产品是否有竞争力的重要标准之一[1]。目前基于Windows平台的相关产品已经占据了市场份额的90%。而Windows 9X和Windows NT凭借其出色的多任务、图形用户接口(GUI)、性能优越的硬件兼容性以及卓越的32位软件环境等性能已经越来越广泛地被应用于工业控制,成为实现实时控制的优秀平台。

  与Windows NT及其实时扩展PTX4.1[2]相比,Windows 9X的应用更为广泛灵活,而且对硬件的要求并不苛刻。本文将讨论在Windows 9X下实现实时控制的关键技术一一实时时钟中断驱动程序的设计及实现。

  二、Windows 9X下实时进钟的获得

  在实时控制中中断技术应用得十分广泛,其中实时时钟的获得基本上都是通过中断来实现的。时钟控制在实时控制中处于十分重要的地位,它负责推进控制过程、激活各控制任务或发关控制消息,起到了总控制器的作用。在Windows 9X下实时时钟的获得可以有不同的方法。设置Win32定时器并通过响应WM-TIMER消息来进行实时处理是最简单的方法。但是由于WM-TIMER消息的低优先级和未处理消息在消息队列中的组合造成了系统实时处理的不稳定,因此这种方法只适合实时性要求不高的应用。若采用Windows多媒体定时器,通过设置回调函数可以获得最高精度为Ims的定时信号,但是由于占用了系统宝贵的资源,而且当定时信号由用户提供或需要更高的中断频率时这种方法就显得无能为力了。与这些基于类似软件中断的方法相比,基于硬件中断的方法占据了主导地位,并在绝大多数的实时系统中得到了应用,因为它保证了对实时控制系统至关重要的可靠性。本文将讨论在PC和Windows 9X环境下对于实时控制系统的设计和实现中最为关键的硬件中断VxD的实现。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

  三、VxD及VtoolsD

  VxD是32位保护模式下的可执行DLL,用于管理系统资源。所有的VxD运行于Windows VMM的监控之下。VMM和VxDs共同构成了Windows Ring 0层的系统内核。

  开发虚拟设备驱动程序(VxD)的常规方法是使用Microsoft出品的设备驱动程序开发工具包DDK(Device Developer Kit)。这要求设计者必须对Windows 95的体系结构、设备驱动程序的结构、VMM(Virtual Machine Manager,即虚拟机管理器)以及Intel CPU体系结构有深入的了解,而且需要保护模式的汇编语言编程经验[3]。但正如我们现在很少有人使用SDK开发Windows应用程序,取而代之以MFC或OWL等C++类库编程一样,DDK的开发人员现在可以使用类似VtoolsD、WinDriver等第三方的软件来编制驱动程序,笔者推荐使用VtoolsD。

  Vireo公司出色的VtoolsD由可视的VxD代码生成器QuickVxD、C运行库、VMM/VxD服务库、C++类库以及VxD的装入程序等组成。利用QuickVxD生成的框架程序和经充分测试过的C运行库或C++类库可以绕过DDK用C或C++来编制驱动程序,这就大大地简化了开发的难度,提高了可靠性。框架程序可以直接在Visual C++集成开发环境中用NMAKE编译为VxD。


来源:http://www.tulaoshi.com/n/20160129/1487238.html

延伸阅读
八、VxD初始化  VMM初始化一个VxD时做下列工作:  1、装载实模式初始化段并调用实模式初始化过程。该过程可以完成阻止装载VxD,阻止启动Windows,指定设备实例数据和在内存中选择页面给  设备专用的工作。  2、装载VxD其它段到32位平坦内存模式的保护模式内存,并丢弃实模式初始化段。  ...
标签: 电脑入门
第一个内核模块(Hello World模块) 代码如下: View Code #includelinux/init.h #includelinux/module.h MODULE_LICENSE("Dual BSD/GPL"); static __init int hello_init(void) { //printk函数在内核中定义对模块可用,内核需要自已的打印涵数 //因为它靠自已运行,而没有相应的库函数。 //模块能够调用printk是因为insmod加...
标签: Delphi
用 delphi 3.0 编写 vxd 设备驱动程序,在delphi 3 下编译通过,delphi 2 下没有测试,delphi 4 建立的 object 文件 m$ linker 5.12.8181 不能识别,这里使用的汇编器是m$的macro assembler ver. 6.11d ,联结器是m$ incremental linker ver. 5.12.8181 ,它们来自 windows 98ddk(http://www.microsoft.com/ddk/ddk98.htm)。 介绍 ...
如何卸载Windows 7的无线网卡设备驱动程序   方法一 1、 双击打开计算机图标; 2、单击卸载或更改程序; 3、选择需要卸载的驱动程序(此处以卸载Intel 1000N无线网卡驱动为例),点击鼠标右键,选择卸载后,按照屏幕提示完成卸载。 备注: Atheros无线网卡一般是名字带有 Atheros wlan Client 的,Bro...
标签: 电脑入门
首先,确保已开启自动更新: 1. 按下 Windows 键 + W 并键入Windows Update。然后点按或单击Windows Update将其打开。 2. 在左侧窗格中点按或单击更改设置。确保重要更新下列菜单设置为自动安装更新(推荐)。 然后,查看您是否已安装最新的 Windows 更新: 3. 点按或单击后退箭头以返回上一屏幕。在左侧窗格中,点按或单击检查更新,然后等...

经验教程

351

收藏

73
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部