《驱动软件使用说明书.doc》由会员分享,可在线阅读,更多相关《驱动软件使用说明书.doc(111页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、北京阿尔泰科技发展有限公司 软件版本:5.0 发行时间:2001 年 12 月1PCI2010 Win95/98/NT/2000 驱驱 动动 程程 序序 使使 用用 说说 明明 书书 请您务必阅读请您务必阅读使用纲要 ,他会使您事半功倍,他会使您事半功倍!目目 录录 第一章第一章版权版权信信息息 第二章第二章绪绪 论论 第一节 使用纲要 第二节 驱动程序功能概述 第三章第三章PCI 即插即用设备即插即用设备驱驱动程序安装动程序安装 第一节 Windows95、98、Me 环境下 PCI 设备驱动程序安装 第二节 WindowsNT 环境下 PCI 设备及驱动程序安装 第三节 Windows20
2、00 环境下 PCI 设备及驱动程序安装 第四节 PCI 接口程序及测试、示范程序的安装 第五节 PCI 设备软件测试系统的介绍 第六节 本驱动程序软件的关键文件 第四章第四章PCI 即即插即用设备操作函数接口介绍插即用设备操作函数接口介绍 第一节 设备驱动接口函数列表 第二节 设备对象管理函数原型说明 第三节 程序查询方式 AD 采样操作函数原型说明 第四节 中断方式 AD 采样操作函数原型说明 第五节 AD 硬件参数系统保存与读取函数原型说明 第六节 程序方式输出 DA 函数原型说明 第七节 测频函数原型说明 第八节 简易的数字 IO 输入输出开关量操作函数原型说明 第九节 PCI 内存映
3、射寄存器操作函数原型说明 第五章第五章共用函数介绍共用函数介绍 第一节 公用接口函数列表 第二节 公用接口函数原型说明 第三节 其他函数 第六章第六章硬件参数结构硬件参数结构 第一节 AD 硬件参数结构(PCI2010_PARA_AD) 第二节 用于数字 I/O 输出参数(PCI2010_PARA_DO) 第三节 用于数字 I/O 输入参数(PCI2010_PARA_DI) 第七章第七章数据转换与排列规则数据转换与排列规则 第一节 如何将 AD 原始数据 LSB 转换电压值 Volt 第二节 DA 的电压值如何转换成输出到 DA 转换器的 LSB 原码数据 第三节 关于采集函数的 PADBuf
4、fer 缓冲区中的数据排放规则 第四节 关于测试应用程序创建并形成的数据文件格式 第八章第八章上层用户函数接口应用实例上层用户函数接口应用实例 第一节 怎样使用 ReadDeviceProAD_NotEmpty 函数直接取得 AD 数据 第二节 怎样使用 ReadDeviceProAD_Half 函数直接取得 AD 数据 第三节 怎样使用 ReadDeviceIntAD 函数直接取得 AD 数据 第四节 怎样使用 SetDeviceDO 函数进行更便捷的数字开关量输出操作 第五节 怎样使用 GetDeviceDI 函数进行更便捷的数字开关量输入操作 第九章第九章底层用户函数接口应用底层用户函数
5、接口应用实实例例 第一节 怎样使用映射寄存器读写函数直接编写 DA 的底层输出程序? 第二节 怎样使用映射寄存器读写函数直接编写开关量输入输出程序 第十章第十章高速大容量、连续不高速大容量、连续不间间断数据采集及存盘技术详解断数据采集及存盘技术详解 第一节 使用程序查询方式实现该功能 第二节 使用中断方式实现该功能 附录附录 A LabView/CVI 图形语言专述图形语言专述北京阿尔泰科技发展有限公司 软件版本:5.0 发行时间:2001 年 12 月2第一章第一章图形化编程图形化编程语语言言 LabVIEW 环环境境及其开放性及其开放性 第二章第二章LabView 驱动驱动程程序接口序接口
6、 第一节 内嵌式驱动程序介绍 第二节 内嵌式驱动器的原型说明 第三节 如何使用我公司的现有的驱动接口直接创建外挂式设备驱动器 第四节 如何使用我公司为用户已定制好的外挂式驱动器 第五节 如何在 LabView 中用上层函数实现 AD 采集 第六节 怎样用上层函数实现 DA 的输出操作 第七节 怎样用上层函数实现开关量输入输出操作第一章第一章 版权信息版权信息 本软件产品及相关套件均属北京市阿尔泰科技发展有限公司所有,其产权受国家法律绝对保护,除非本公司书 面允许,其他公司、单位、我公司授权的代理商及个人不得非法使用和拷贝,否则将受到国家法律的严厉制裁。您 若需要我公司产品及相关信息请及时与我们
7、联系,我们将热情接待。第二章第二章 绪绪 论论 第一节、第一节、使用纲要使用纲要 一、使用上层用户函数,高效、简单使用上层用户函数,高效、简单 如果您只关心通道及频率等基本参数,而不必了解复杂的硬件知识和控制细节,便可如能所需,那么我们强烈 建议您使用上层用户函数,它们就是几个简单的形如 Win32 API 的函数,具有相当的灵活性、可靠性和高效性。诸 如 InitDeviceProAD、ReadDeviceProAD_NotEmpty、SetDeviceDO 等。而底层用户函数如 WriteRegisterULong、ReadRegisterULong、WritePortByte、ReadP
8、ortByte则是满足了解硬件知识和控制细节、且 又需要特殊复杂控制的用户。但不管怎样,我们强烈建议您使用上层函数(在这些函数中,您见不到任何设备地址、 寄存器端口、中断号等物理信息,其复杂的控制细节完全封装在上层用户函数中。 )对于上层用户函数的使用,您 基本上可以必参考硬件说明书,除非您需要知道板上 D 型插座等管脚分配情况。 二、如何管理二、如何管理 PCI 设备设备 由于我们的驱动程序采用面向对象编程,所以要使用设备的一切功能,则必须首先用 CreateDevice 函数创建一 个设备对象句柄 hDevice,有了这个句柄,您就拥有了对该设备的绝对控制权。然后将此句柄作为参数传递给其他
9、 函数,如 InitDeviceProAD 可以使用 hDevice 句柄以程序查询方式初始化设备的 AD 部件,ReadDeviceProAD 函数可 以用 hDevice 句柄实现对 AD 数据的采样读取,SetDeviceDO 函数可用实现开关量的输出等。最后可以通过 ReleaseDevice 将 hDevice 释放掉。 二、如何用非空查询方式取得二、如何用非空查询方式取得 AD 数据数据 当您有了 hDevice 设备对象句柄后,便可用 InitDeviceProAD 函数初始化 AD 部件,关于采样通道、频率等的参 数的设置是由这个函数的 pPara 参数结构体决定的。您只需要对
10、这个 pPara 参数结构体的各个成员简单赋值即可实 现所有硬件参数和设备状态的初始化。然后用 StartDeviceProAD 即可启动 AD 部件,开始 AD 采样,然后便可用 ReadDeviceProAD_NotEmpty 反复读取 AD 数据以实现连续不间断采样。当您需要暂停设备时,执行 StopDeviceProAD,当您需要关闭 AD 设备时,ReleaseDeviceProAD 便可帮您实现(但设备对象 hDevice 依然存在) 。 (注:ReadDeviceProAD_NotEmpty 虽然主要面对批量读取,高速连续采集而设计,但亦可用它以单点或几点的方 式读取 AD 数据
11、,以满足慢速采集需要) 。具体执行流程请看下面的图 2.1.1。 三、如何用半满方式取得三、如何用半满方式取得 AD 数据数据 当您有了 hDevice 设备对象句柄后,便可用 InitDeviceProAD 函数初始化 AD 部件,关于采样通道、频率等的参 数的设置是由这个函数的 pPara 参数结构体决定的。您只需要对这个 pPara 参数结构体的各个成员简单赋值即可实 现所有硬件参数和设备状态的初始化。然后用 StartDeviceProAD 即可启动 AD 部件,开始 AD 采样,接着调用 GetDevStatusAD_Half 函数以查询 AD 的存储器 FIFO 的半满状态,如果达
12、到半满状态,即可用 ReadDeviceProAD_Half 函数一批半满长度(或半满以下)的 AD 数据,然后再接着再查询 FIFO 的半满状态,若有 效再读取,就这样反复查询状态反复读取 AD 数据即可实现连续不间断采样。当您需要暂停设备时,执行 StopDeviceProAD,当您需要关闭 AD 设备时,ReleaseDeviceProAD 便可帮您实现(但设备对象 hDevice 依然存在) 。 (注:ReadDeviceProAD_Half 函数在半满状态有效时也可以单点或几点的方式读取 AD 数据,只是到下一次半满信 号到来时的时间间隔会变得非常短,而不再是半满间隔) 。具体执行流
13、程请看下面的图 2.1.2。 四、如何用中断方式取得四、如何用中断方式取得 AD 数据数据 当您有了 hDevice 设备对象句柄后,便可用 InitDeviceIntAD 函数初始化 AD 部件,关于采样通道、频率等的参北京阿尔泰科技发展有限公司 软件版本:5.0 发行时间:2001 年 12 月3数的设置是由这个函数的 pPara 参数结构体决定的。您只需要对这个 pPara 参数结构体的各个成员简单赋值即可实 现所有硬件参数和设备状态的初始化。同时应调用 CreateSystemEvent 函数创建一个内核事件对象句柄 hEvent 赋给 InitDeviceIntAD 的相应参数,它将
14、作为接受 AD 半满中断事件的变量。然后用 StartDeviceIntAD 即可启动 AD 部件, 开始 AD 采样,接着调用 Win32 API 函数 WaitForSingleObject 等待 hEvent 中断事件的发生,在中断未到时,自动使 所在线程进入睡眠状态(不消耗 CPU 时间) ,反之,则立即唤醒所在线程,执行它下面的代码,此时您便可用 ReadDeviceIntAD 函数一批半满长度(或半满以下)的 AD 数据,然后再接着再等待 FIFO 的半满中断事件,若有效 再读取,就这样反复读取 AD 数据即可实现连续不间断采样。当您需要暂停设备时,执行 StopDeviceInt
15、AD,当您需 要关闭 AD 设备时,ReleaseDeviceIntAD 便可帮您实现(但设备对象 hDevice 依然存在) 。 (注:ReadDeviceIntAD 函 数在半满中断事件发生时可以单点或几点的方式读取 AD 数据,只是到下一次半满中断事件到来时的时间间隔会变 得非常短,而不再是半满间隔,但它不同于半满查询方式读取,由于半满中断属于硬件中断,其优先级别高于所有 软件,所以您单点或几点读取 AD 数据时,千万不能让中断间隔太短,否则,有可能使您的整个系统被半满中断事 件吞没,就象死机一样,不能动弹。 切忌、切忌!)具体执行流程请看图 2.1.3。注意:图中较粗的虚线表示对称关系
16、。如红色虚线表示注意:图中较粗的虚线表示对称关系。如红色虚线表示 CreateDevice 和和 ReleaseDevice 两个函数的关系是:两个函数的关系是: 最初执行一次最初执行一次 CreateDevice,在结束是就须执行一次,在结束是就须执行一次 ReleaseDevice。北京阿尔泰科技发展有限公司 软件版本:5.0 发行时间:2001 年 12 月4开始创建设备对象 CreateDevice()初始化设备对象 AD InitDeviceProAD()启动 AD 设备 StartDeviceProAD()以非空查询方式读取 AD 数据 ReadDeviceProAD_NotEmp
17、ty()用户对采集到的 AD 数据进行处理 其代码应由用户根据需要编写需要再紧接着读取 AD 数 据以实现连续采集吗?是释放 AD 设备 ReleaseDeviceProAD()需要改变通道或频率或清 FIFO 后再采集吗?否需要释放设备对象 ReleaseDevice()不需要结 束图 2.1.1 非空查询方式 AD 采集实现过程接着上次再读 AD 数 据重新初始化 AD北京阿尔泰科技发展有限公司 软件版本:5.0 发行时间:2001 年 12 月5以半满查询方式读取 AD 数据 ReadDeviceProAD_Half()需要开始创建设备对象 CreateDevice()初始化设备对象 A
18、D InitDeviceProAD()启动 AD 设备 StartDeviceProAD()用户对采集到的 AD 数据进行处理 其代码应由用户根据需要编写需要再状态读取 AD 数据 以实现连续采集吗?是释放 AD 设备 ReleaseDeviceProAD()需要改变通道或频率或清 FIFO 后再采集吗?否释放设备对象 ReleaseDevice()不需要结 束图 2.1.2 半满方式 AD 采集实现过程再接着上次查半满状态和读 AD 数 据重新初始化 AD查 FIFO 半满状态,半满吗? GetDevStatusAD_Half向其他线程抛出一定时间 (如 1 毫秒或 1 微秒) Sleep(
19、1)或 DelayTimeNs(10)没有半满半满北京阿尔泰科技发展有限公司 软件版本:5.0 发行时间:2001 年 12 月6不等于 0,且等 于0xe1000000用户对采集到的 AD 数据进行处理 其代码应由用户根据需要编写等于 0不需要开始创建设备对象 CreateDevice()初始化设备对象 AD InitDeviceIntAD()启动 AD 设备 StartDeviceIntAD()以半满中断方式读取 AD 数据 ReadDeviceIntAD ()需要再紧接着读取 AD 数 据以实现连续采集吗?是释放 AD 设备 ReleaseDeviceIntAD()需要改变通道或频率或清
20、 FIFO 后再采集吗?否需要释放设备对象 ReleaseDevice()结 束图 2.1.3 半满中断方式 AD 采集实现过程再接着上次等待中断事件重新初始化 AD等待半满中断事件 WaitForSingleObject(hEvent)若中断事件未到, 则睡眠,不往下执行创建内核事件对象 CreateSystemEvent()若中断事 件到达, 则被唤醒, 往下执行判断函数返回值不等于 0,且不 等于0xe1000000一级缓冲溢出,退出吗?不是释放内核事件对象 ReleaseSystemEvent()北京阿尔泰科技发展有限公司 软件版本:5.0 发行时间:2001 年 12 月7五、如何实
21、现开关量的简便操作五、如何实现开关量的简便操作 当您有了 hDevice 设备对象句柄后,便可用 SetDeviceDO 函数实现开关量的输出操作,其各路开关量的输出状 态由其 pPara 中的成员变量 DO0-DO15 决定。由 GetDeviceDI 函数实现开关量的输入操作,其各路开关量的输入状 态由其 pPara 中的成员变量 DI0-DI15 决定。 六、如何实现六、如何实现 DA 的简便输出的简便输出 当您有了 hDevice 设备对象句柄后,首先用 InitDevProDA 函数实现 DA 的复位操作,然后反复调用 WriteDevProDA 函数输出每一个 DA 数据。 七、哪
22、些函数对您不是必须的?七、哪些函数对您不是必须的? 当公共函数如 CreateFileObject, WriteFile,ReadFile 等一般来说都是辅助性函数,除非您要使用存盘功能。如果 您使用上层用户函数访问设备,那么 GetDeviceAddr,WriteRegisterByte, WriteRegisterWord, WriteRegisterULong, ReadRegisterByte, ReadRegisterWord, ReadRegisterULong 等函数您可完全不必理会,除非您是作为底层用户管理设备。 而 WritePortByte, WritePortWord,
23、WritePortULong, ReadPortByte, ReadPortWord, ReadPortULong 则对 PCI 用户来说, 可以说完全是辅助性,它们只是对我公司驱动程序的一种功能补充,对用户额外提供的,它们可以帮助您在 NT、Win2000 等操作系统中实现对您原有传统设备如 ISA 卡、串口卡、并口卡的访问,而没有这些函数,您可能在 新操作系统中无法继续使用您原有的老设备(除非您自己愿意去编写复杂的硬件驱动程序) 。第二节第二节 驱动程序功能概述驱动程序功能概述 一、数据传输采集方式一、数据传输采集方式 我公司提供的驱动程序完全支持程序查询方式、硬件中断方式、直接内存存取程
24、序查询方式、硬件中断方式、直接内存存取DMA)方式)方式。您从我公司所购 买的硬件产品能支持的数据采集方式,我们的驱动程序均予以满足。二、数据传输与数据处理的独立性二、数据传输与数据处理的独立性 为了提高数据吞吐率以及实现实时数据处理(如随时取数、随时暂停设备、随时开始传输、随时存盘、随时显示 波形、随时设备控制输出等功能), 我们采用一种最新、最灵活的设计思想,即数据采集传输和数据处理相独立的思 想。即用我们所创建的设备对象在 Windows 系统空间管理一个一级强制性缓冲队列,该缓冲队列可支持 128K 字 (即 256K 字节)的系统内存空间 Buffer,该队列采用先进先出策略和动态链
25、表等技术来更高效地管理这个 Buffer。 这个队列缓冲与用户数据缓冲区相独立,设备对象在后台负责数据采集和传输,将其数据映射到相应的队列缓冲单 元,且维持一个动态链表,并向用户发送相应的通知消息。而用户则不必知道内部的任何复杂操作,而只须在这个 消息到来时,使用 ReadDeviceIntAD 函数读一批 AD 数据或几批即可。重要的是,在这个消息没有到来时,用户代 码不必花任何 CPU 时间去轮询等待,而用户正好利用这段空闲时间去处理更多的任务。即轻松实现了数据采集与数 据处理的同步并发进行。这将是最高效的。这个队列缓冲跟先进先出存储器 FIFO 芯片功能基本一致,只不过这个 缓冲是一个被
26、软件仿真的 FIFO 存储器。使用这项技术的最大优点就是完全解决了在多任务环境中实现高速连续采 集数据难的问题。特别是整个系统突然繁忙的时候,比如用户在高速采集数据或实时存盘时,偶而移动窗口或改变 窗口大小或弹出对话框时,这项技术足以保证所采集的数据完整无缺。如果用户希望应用程序有更好的处理能力和 克服操作系统的陡然忙碌对连续数据采集的影响,可以考虑在用户模式中再使用二级缓冲队列和相应的缓冲区链表 技术。具体细节请参考 NT 下的中断演示程序。(目前在 Window NT 中完全支持此项技术,在以后的 Win2000 和 WinXP 版本中应该会进一步提供)。三、连续不间断大容量采集存盘三、连
27、续不间断大容量采集存盘 在虚拟仪器、实验室数据分析、医疗设备、记录仪等诸多研究和应用领域中,对数据的要求很高,一方面数据 容量较大,如几百兆甚至几仟兆,另一方面采样速度都较高,如 200KHz,300KHz 等,更重要是要求在高速长时间 的采集数据过程中,不能丢掉一个点,必须全部存入硬盘,同时还要进行一些点的抽样分析,这在 DOS 环境中实 现起来就有较大的难度,就更别说在 Windows 这样的多任务环境中(对于 Windows 多任务机制请参阅有关 Windows 手册) 。大家知道 Windows 的各应用程序总是不断地被任务调度器调度,循环处在睡眠、排队、就绪、触 发运行等状态中。Wi
28、n95 任务之间的切换密度至少大于 1 毫秒,那么如果要以 300KHz 频率采样(即每 3.3 微秒就 得传输一个数据) ,很显然有大量的数据在传输中由于任务之间的切换而被丢失掉。这就是基于 Windows 客户程序 在传统模式下,高速连续采集传输数据时所具有的局限性。为了突破这种局限性,就得采用别的办法,如非客户程 序、内核程序、驱动程序(如 VxD、微代码)等,再加上我们所掌握的新技术,如内存映射、直接写盘技术以及独 有的设计思想便可以很好的解决这些问题。从 1998 年 9 月开始,已有部分用户实际使用,反映良好。我们自己也 经过全面测试,比如在 Windows95 下使用无 FIFO
29、 芯片的 BH5104 模板,实际结果是:以 200KHz 频率,双通道采 集正弦波且存盘,写满整个硬盘近 4000 兆数据,其时间长达个小时左右,随后再读盘回放磁盘数据,整个波形 没有发现任何串道、断点和畸形状。当然 PCI2010 等 PCI 设备同样具这样的性能。它不仅具有一级硬件缓冲 FIFO(其缓冲深度可调 1KB、2KB、4KB、8KB、16KB 等),同样具有第二节中叙述的二级强制队列缓冲,这个软件 防真的缓冲比一级缓冲要大几十倍。如果用户需要的话,可以在应用程序中再建立循环式用户缓冲,即可实现高速 不间断大容量采集存盘功能。北京阿尔泰科技发展有限公司 软件版本:5.0 发行时间
30、:2001 年 12 月8四、后台工作方式四、后台工作方式 我们的驱动程序为用户提供了后台工作方式进行数据传输,这样可以保证您的前台应用程序能实时高效的进行 数据处理。后台方式的特点是在进行数据采集和传输过程中不占用客户程序的任何时间,当采集的数据长度达到客 户指定的值时便触发客户事件,客户程序接受该事件便开始进行数据处理。在数据处理的同时,驱动程序依然在进 行下一批数据的传输,即实现了并行操作,极大的提高了数据的吞吐量和计算机系统的整体处理能力。五、与设备无关性五、与设备无关性 通过总结各数据采集卡的的共同特点,设计了基本一致的接口方式,可以让您的应用程序不仅能适应您所购买 的我公司第一种产
31、品,同时也能不经修改地适应我公司的其他同类产品(只有极少数设备需要极少的修改,其修改 的比例基本不超过 5%) 。所以可以保证您的应用程序在我们的硬件产品基础上极为容易地进行功能和应用扩展,节 省您的大部分软件投资,极大的缩短工程开发周期。六、驱动程序的坚固性六、驱动程序的坚固性 我们的驱动程序都是经过严密彻底的测试和验证,并经部分用户试用之后,确认没有任何问题后才予以正式发 行的,所以当您使用起来应该有十足的安全感。七、驱动程序特点七、驱动程序特点 由于我们的驱动程序均采用动态虚拟技术(Windows 95) ,微内核代码(Windows NT)因此可动态装载和卸载, 而且可以重入,即可实现
32、多道任务同时访问硬件设备的功能。这样可以保证您的软硬件资源可以被充分有效的利用。 特别是在 Windows NT 下,采用队列突发机制,可以实现几十道线程序同时访问一设备的功能。八、高效与灵活兼备八、高效与灵活兼备 如果您只是应用系统的上层用户,您多半不愿意了解 PCI 硬件设备的各种复杂控制和操作协议,而只需要设置 好您最关心的硬件参数(比如采集的 AD 通道、采样频率等) ,然后用一个读数的函数,跟上 AD 数据缓冲区和请求 采集的数据长度,一执行程序便可以得到外部的数据,试想,这是不是一种最高效、最简单易用的方式。这种方式 我们优先提供。比如下面将介绍的接口函数:InitDevicePr
33、oAD、ReadDeviceProAD 等两三个函数便可以帮助上层用 户实现数据采集;但如果您是较为底层的用户,对硬件设备很熟悉,且有更特殊的编程和控制模式,那么您可能需 要对硬件进行直接编程,就象传统的 ISA 总线设备,您想用 C 语言的 outp、inp,汇编语言的 out、in 的命令访问这 些 ISA 设备的形式来访问 PCI 设备的各个寄存器,那么我们为您提供了这类似的方法,只是函数名不一样,如写寄 存器函数名为:WriteRegisterULong(32 位方式),读寄存器函数名为 ReadRegisterULong(32 位方式),但是功能更强, 不仅有 32 位的,更有 16
34、 位的,8 位的读写函数。它能访问硬件说明书里提供的任何一个寄存器。凡未注明,本设 备所列寄存器均以 32 位方式访问,当然,随着设备与驱动程序的升级,我们还会提供 64 位的寄存器读写接口。九、安装程序特点九、安装程序特点 关于驱动程序的安装方式我们采用大多数 Windows 应用程序所使用的标准模式,因而简捷、方便、直观。您只 需执行安装盘上的 Setup.exe 启动文件即可进行驱动程序的安装工作。在安装过程中您设置好安装目标路径以及文件 夹名称等信息后,安装程序便自动而又快捷地为您安装好驱动程序,随后您便可以用驱动程序接口编写应用程序或 用我们提供的简易测试程序测试设备了。十、多语言编
35、程环境十、多语言编程环境 本系统提供 Visual C+、C+ Builder、 Visual Basic、Delphi、 LabView、LabWindows/CVI 的函数接口,使您 完全可以根据自己的需要和喜爱选择合适的编程语言。请记住,您得使用 32 位编程模式。但对于 LabWindows/CVI 接口,属于定制服务,如果用户需要,请另与我公司或指定代理商联系以便协商解决。十一、为十一、为 Visual Basic 环境提供直接的多线程支持环境提供直接的多线程支持 在 VB 环境中进行各种实时控制和用户级后台操作,不用子线程,那简直是不可想象的事情。但是在通常情况下, 要在 VB 环
36、境中实现多线程操作并不象 VC 那么容易了。往往要相当复杂的对象操作,而且很不具有灵活性。但是 有了我们的驱动程序支持,使这件事变得极为容易,甚至比 VC 还要容易。比如执行 CreateVBThread 函数,跟上 hThread 和 NewRoutine 两个参数,即可创建线程对象,并获得对象句柄,随后便可用 ResumeThread 函数启动子线 程。在 VB 应用程序中,可以创建任意多个子线程。十二、我公司动态库与其他公司动态库的比较十二、我公司动态库与其他公司动态库的比较 值得注意的是,我们的 DLL 库不同于其它许多公司所编写的那样,只是对动态库的简单直接地调用,其硬件控 制、数据
37、传输代码都放在 DLL 中,那么其代码的优先执行级别跟一般的用户程序是一样的,它总要定期地、不断地 被系统级任务调度器调度,所以当这些代码在负责传输数据时往往被瞬时中断,有时这个时间还很长,故此,极有 可能造成丢点的严重现象。且这种方案不可能提供硬件中断以及内存直接存取(DMA)方式来传输数据,这样难以 满足用户的各种需求。为了解决这些问题,在 Win95、Win98 环境下,我们没有把硬件控制、数据传输代码简单地 放在 DLL 中,而是通过动态虚拟技术以 VxD 的形式放在了 Windows 系统空间中,以 CPU 的 0 级环级别同系统代 码协同工作,也就是说它可以获得与任务调用器一样的级
38、别,且不受任务调度器的调度管理。在 NT 环境下,我们 通过微内核技术微内核技术把硬件控制、数据传输代码以微内核代码(简称微代码微代码)形式放在 NT 的内核模式中,成为 NT 操 作系统的一部分,并可根据代码的重要程度进一步迅速临时提升 CPU 的 IRQL 级别,使这些代码以高优先级,高速度工北京阿尔泰科技发展有限公司 软件版本:5.0 发行时间:2001 年 12 月9作,极大的提高了数据采集和传输的质量。而我们的 DLL 的主要任务不是采集数据,而是对驱动程序的全面封装, 对用户负责简化所有复杂的繁琐的操作细节,特别是 Windows 底层管理,提供简洁一致的函数接口供用户使用。它 具
39、体表现在从用户空间到系统空间(Windows95,98) 、从用户模式到内核模式(Windows NT)、从 CPU 的 3 级环到 0 级环(Windows)等相互间的转换以及设备 I/O 请求的来回传递。所以,我们的驱动程序不是 DLL,而是形如 *.VxD(Win95)或*.SYS(NT)的代码文件。通过这样的技术便能实现设备所有功能,极大范围地满足用户需要。十三、跨平台设计十三、跨平台设计 至今,Windows95 与 Windows NT 是两大主流操作系统,它们各有其优点,但随着计算机的进一步网络化以及 追求高可靠性和高稳定性,Windows NT 在不远的将来便会最终取代其它相关
40、的 Windows 平台,成为更先进的视窗 操作系统。为保护用户的软硬件投资,满足用户更长远的需要,我们不仅同时提供了基于 Windows95(98)和 Windows NT 操作平台的驱动程序,而且尽力做到了跨平台设计,使您的用户程序不用作怎么修改,一般只须在不 同的平台重新编译、链接,便可运行在两种平台上。十四、十四、LabView/CVI 支持支持 LabView/CVI 是美国国家仪器公司(National Instrument)的虚拟仪器开发平台,特别是基于图形化编程的 LabView 语言,在测量、工控、虚拟仪器方面受到广大工程师和用户的青睐。其全球销售量仅次于 C+语言。我们 自
41、主开发的硬件(PCI、USB、ISA 总线系列)产品提供了基于 LabView 的驱动软件接口模块,与 LabView 软件平 台完全兼容,让您轻松实现图形化编程。十五、纳秒级高效与高精度延时定时操作十五、纳秒级高效与高精度延时定时操作 最新设计的 DelayTimeNs 函数可以为您提供精度高达 100 纳秒的延时,且这个延时是相当高效的。因为人们惯 用的方法是简单循环的执行 CPU 的某条指令来实现的,如汇编语言的“nop”指令。这个方法固然能实现延时的目 的,但是延时精度低以外,更糟糕的是它抢占了 CPU 大量的宝贵时间。特别是在多任务多线程环境中,这种延时方 法将导致整个应用程序乃至整
42、个 Windows 系统的低效。现举列说明:将如在应用程序中有 A、B 俩线程(线程优先 级相等) ,A 线程负责以程序半满查询方式采集数据,设 FIFO 深度为 4K(4096 个点) ,即半满为 2048 个点。且采 集频率为 100KHz(10 微秒 1 个点) ,即每相邻两个半满时间间隔为 20480 微秒。B 线程在 A 线程的同步下,负责 窗口波形显示或数据存盘或数据分析等大量耗时操作。如果既要保证 A 线程能将每一批半满数据取回送入用户缓冲 区,又要保证 B 线程在 A 线程的同步下,将用户缓冲区中的数据进行一一波形绘制或全部存盘或分析等,而这些工 作极有可能比 A 线程需要更多
43、的 CPU 时间。由此可见两个线程必须有足够的 CPU 时间。但是系统中只有一个 CPU,两个线程只能分时占有 CPU 时间片。又因在线程调度策略中,由于级别相等,所以 AB 线程平等占用 CPU 时间。尽管 A 线程采用半满方式读一批数据,但是在半满信号没有到来时,它依然要花掉大量的 CPU 时间去轮询 延时等持半满信号。这个时间经计算每次竟高达 20480 多微秒。但是实际上在每个半满信号到来时,从 FIFO 中取 回 2048 个点可能只需要几十微秒就足够了,那么致少有 20000 微秒在这个延时中被牺牲掉了。而这正是普通方法 的弊端。试想:如果能在每两个半满信号之间,将这 20000
44、微秒从 A 线程中让出来,让线 B 线程及主程序,岂不可 以极大的提高整个应用程序处理效率?因此我们为您提供了 DelayTimeNs 函数,它不仅可以在每次轮询半满信号时, 如果半满信号无效,即可抛出以 100 纳秒为单位的时间数给其他线程或应用程序。以提高整体效率。同时也可以应 用在其他许多场合。 (其实现范例代码请参考第八章函数接口应函数接口应用用实例实例 ) 。十六、对传统总线设备的支持十六、对传统总线设备的支持由于某些用户可能除了使用现在流行的高级设备,如 PCI、USB 等总线的设备,但同时还要沿用以前购置的老 设备(如基于 ISA 总线、并口、串口等设备)这些设备只能使用 I/O
45、 地址,而不象 PCI 设备那样能使用内存映射地 址。特别是对这些设备的访问,只能使用汇编语言的 in、out 指令和 C 语言的 outp、inp 等函数来实现读写。但是这 些手段只能在 DOS、Win3.1、Win95 等操作系统中使用,如果您要在 Windows NT、Windows 2000、Windows XP 中使用,那是绝对不行的。因为这些指令已被操作系统作为权限控制,不允许用户在上层应用程序中使用这为了尽 可能的保护您的前期投资,我们为您提供了能直接访问这些老设备的相应接口。如 WritePortByte、ReadPortByte 等。 注意,为了提高速度,您应使用带后缀“Ex
46、”函数访问设备,如 WritePortByteEx、ReadPortByteEx 等,因这些函数 通过驱动程序底层的支持,突破了操作系统的某些限制,使它们能在用户直接访问 I/O 端口。十七、自动卸载功能十七、自动卸载功能在您已安装了本软件系统后,如果不再准备使用本系统,您可以通过我们为您提供的组件 unInstallShield 从 Windows 系统中自动卸载本软件系统。十八、十八、LabView/CVI 支持支持 如果您采用 Typical 安装选项,那么您一般可以得到我们为您提供的如下组件:Hardware Help 硬件使用说明 Word 帮助文档;ReadmeFile 安装目录等
47、信息简介;Setup 关于硬件参数设置的应用程序; Software Help 软件使用说明 Word 帮助文档;北京阿尔泰科技发展有限公司 软件版本:5.0 发行时间:2001 年 12 月10Test Application 基于 Microsoft Visual C+代码的硬件测试应用程序;Visual C+ Sample Microsoft VC+演示程序(这个程序对驱动程序演示说 明最全面) ;Visual Basic Microsoft VB 演示及接口程序文件(PCI2010.Bas)C+ Builder Borland C+ Builder 演示程序;Delphi Borland Delphi 演示及接口程序文件(PCI2010.Pas) ;LabView 美国国家仪器公司(National Instrument)的虚拟仪器开发平台的演示程序及接口模块程序UnInstallShield 本软件卸载应用程序;第三章第三章 PCI 即插即用设备驱动程序安装即插即用设备驱动程序安装第一节第一节 Windows95、98、Me 环境下环境下 PCI 设备驱动程序安装设备驱动程序安装一、安装步骤一、安装步骤 第一步 将