首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
嵌入式技术
» Windows 2000环境下测控系统的WDM设备
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
Windows 2000环境下测控系统的WDM设备
发短消息
加为好友
forsuccess
当前离线
UID
871057
帖子
6281
精华
0
积分
3141
阅读权限
90
在线时间
282 小时
注册时间
2012-2-21
最后登录
2015-6-23
论坛元老
UID
871057
性别
男
1
#
打印
字体大小:
t
T
forsuccess
发表于 2012-5-16 00:38
|
只看该作者
Windows 2000环境下测控系统的WDM设备
程序
,
Windows
,
Microsoft
,
驱动
,
模型
摘要:介绍了Windows2000操作系统下的最新的设备驱动程序模型(WDM)的基本原理,同时以CompuwareNumega公司的DriverWorks为开发工具,开发出了基于PCI局部总线的测控系统某专用接口卡的WDM设备驱动程序。
关键词:设备驱动程序模型;WDM;DriverWorks;PCI局部总线
1WDM驱动程序的基本原理
WDM驱动模型是Microsoft公司推出的最新的Windows驱动程序模型,他有许多新的特性,如分层结构、即插即用、电源管理、WMI等,是未来驱动程序发展的方向。如图1所示,Windows2000中应用程序不能直接访问底层硬件,而必须通过设备驱动程序进行操作(读、写、中断等)。应用程序对设备I/O进行Win32API函数调用,这个调用由I/O系统服务接收,I/O管理器从这个请求构造一个合适的I/O请求包(IRP),然后传递给设备驱动程序,设备驱动程序与硬件打交道,并完成IRP的处理,最后I/O管理器把数据和结果返回给Win32和用户应用程序。
2PCI9052计数卡驱动程序的开发
(1)计数卡用途及硬件电路设计
在测控系统领域,经常需要对光栅、电机编码器等传感器传输过来的脉冲进行计数,这样才可以得到控制对象的准确位置等数据,对脉冲计数的接口卡硬件电路原理图如图2所示。PCI总线经过PCI9052(PCIBUSLOCALBUS转换芯片)连接到局部总线,然后经过译码将I/O端口地址分配给计数专用芯片,PCI9052的LOCALBUS一侧的中断线连接至硬件中断触发端。这样,当中断触发时,计数专用芯片锁存外部传感器的计数脉冲的当前值,进行实时采样。
(2)设备驱动程序的设计
①DriverWorks简介
开发驱动程序一般都使用DDK(微软提供的驱动程序开发软件包),但是这种方法开发周期长,难度大。DriverWorks是开发驱动程序的非常好的工具,他定义了许多类,这些类封装了DDK提供的函数,完全兼容DDK的全部函数。他自动生成一个驱动程序框架,驱动程序开发者只是在需要的地方添加一些代码,这样能很快地开发出NT或WDM设备驱动程序,而且DriverWorks函数库的使用,可以大大减少驱动程序的代码长度。因此,实验中采用了DriverWorks来开发驱动程序。
②PCI计数卡驱动程序的组成
驱动程序组成模块如图3所示。
③用户应用程序和驱动程序的通讯
较为通用的方法是应用程序使用Win32API函数DeviceIoControl,ReadFile或者WriteFile与驱动程序进行通讯。
例如用户应用程序使用标准Win32API函数DeviceIoControl来执行某项操作,在驱动程序一方,这个DeviceIoControl调用被转化成一个带有特殊的IRP-MJ-DEVICE-CONTROL功能码的IRP。通常,此IRP处理有如下的模型如图4所示。
④PCI计数卡设备驱动程序中的主要代码
在驱动程序中,首先要定义Pciwdmdevice类,他是KPnpDevice的公有派生类,代表PCI计数卡的设备对象,然后才可以调用相应的函数访问硬件。在PciwdmDeviceh头文件中定义如下:
驱动程序要想访问硬件,就必须获取相关的硬件资源。WDM驱动程序通过资源描述符列表获取硬件资源,在用DriverWorks开发时,这一步变得非常简单,他自动地在源文件PciwdmDevicecpp的即插即用的启动例程中添加如下的代码:
测控系统经常要求实时性,如实时性数据采集。用DriverWorks开发驱动程序可以通过硬件中断来处理,中断服务例程(ISR)运行在DIRQL中断优先级,比一般的服务例程的优先级高很多,在此级别上不能进行大多数的内核调用,因此ISR仅执行一些紧急的任务,然后调用一个在DISPATCH-LEVEL(比DIRQL优先级低)级别上运行的延迟过程调用例程(DPC),最后完成IRP,也就完成了实时性数据采集的要求。
应用程序用CreatFile()函数打开到WDM设备句柄,在使用缓冲I/O方式时,操作系统自动地将用户缓冲区复制到非分页内存或者从非分页内存复制出来,在IRP首部存储合适的指针,在驱动程序中只需简单地读或者写这个内存就可以了。在应用程序的最后调用CloseHandle()函数关闭WDM设备。
至此,对硬件的读、写和中断的工作都已经完成,实现了预期的目标。如果是开发ISA总线的接口卡,则还需要修改INF安装文件,指定硬件资源,如I/O端口地址和中断号。而开发PCI总线的接口卡时,系统读取PCI的配置空间的信息,自动分配硬件资源,不需要进行手工设置。
3结语
上述实例在实验中得到了成功运用,实践证明是可行的。WDM模式的驱动程序虽然目前应用得还不是很多,但是相信在几年之后必将成为驱动程序的主流模式。WDM驱动程序模型是非常复杂的,在此只是起到抛砖引玉的作用,对这一模型进行了简单的概括性的描述,在应用上还有很多需要深入和扩展的地方。
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议