首页资源分类电源技术 > 基于Windows CENET嵌入式数据采集卡的驱动程序设计.pdf

基于Windows CENET嵌入式数据采集卡的驱动程序设计.pdf

已有 454993个资源

下载专区

文档信息举报收藏

标    签: windows嵌入式数据数据采集驱动

分    享:

文档简介

基于Windows CENET嵌入式数据采集卡的驱动程序设计.pdf

文档预览

第 25卷 2005年 12月   计算机应用 Computer App lications   Vol. 25 Dec. 2005 文章编号 : 1001 - 9081 (2005) 12Z - 0424 - 02 基于 W indows CE. NET嵌入式数据采集卡的驱动程序设计 吴  凡 ,赖乙宗 ,李  迪 (华南理工大学 机械工程学院 ,广东 广州 510640) (wuwufanfan@ tom. com ) 摘  要 :介绍了嵌入式数据采集卡的组成原理和 W indow s CE. NET核心驱动程序的体系结构 , 讨论了数据采集卡基于 W indow s CE. NET驱动程序的开发过程 。测试表明驱动程序高效可靠 。 关键词 :嵌入式系统 ;驱动程序 ; W indow s CE. NET;数据采集卡 中图分类号 : TP311. 52  文献标识码 : A 0  引言 与通用型计算机系统相比 ,嵌入式系统以其小型 、专用 、 易携带 、功耗低 、可靠性高的特点 ,已经在工业界得到广泛应 用 。而 M icrosoft W indow s CE. NET是一个为多种嵌入式系统 和产品而设计的紧凑 、高效 、可升级的实时嵌入式操作系统 。 目前许多通讯设备 ,消费类电子产品 ,工业自动化装置等都采 用其作为控制系统 [1 ] 。 本文讨论 W indow s CE. NET的一项关键技术 ,即设备驱 动程序的开发 ,并将结合实际设备驱动开发中的经验 ,对相关 问题进行深入探讨 。 1  数据采集卡组成原理与工作过程 1. 1 数据采集卡的组成 本文讨论的是自行开发的应用于数控系统的一种包括计 数器和带光电耦合器件的数字输入输出 ( I/ O ) 卡 ,它基于 PC104总线 ,并与 ISA 总线完全兼容 。其中 ,计数器用于光栅 尺的计数 ,能实现 32路数字量输入和 32路数字量输出 ,其中 1 路输入可实现中断功能 。占用基地址 (可设置 )开始的 16 个连续的端口地址 (例如 0x230H ~0x23FH ) 。该卡用于开关 信号量的采集 ,同时能驱动步进电机和伺服电机 ,并利用光栅 尺实现准确定位 ,目前在开放式数控系统和液压控制器中使 用 ,工作正常 。原理如图 1 所示 。 1. 2 数据采集卡的工作过程 图 1  I/O 卡原理 当主机发出启动命令 ,由硬件产生一个触发信号 ,启动采 集卡开始工作 。其中 ,一路定时器输出采样频率 ,由 8M 晶振 产生 ,可以输出 8M - 32K的采样频率 ,由程序设定 。两路计 数器用于光栅尺的计数 ,实现主轴的准确定位 。采集到的数 据贮存到一个缓冲区 ,等待主机的读取 ,向缓冲区写数据和主 机读数据能同步进行 。当数据采集任务结束后 ,主机发出停 止命令 ,结束数据采集卡的工作 。输出信号可控制继电器开 关和步进电机的运转 ,完成数控系统的正常工作 。 为了令数据采集卡正常工作 ,需要在软件中对系统资源 进行访问 ,W indow s CE. NET需要有设备驱动程序才能实现 对硬件的完全访问 。设备驱动程序不是单独存在的 ,是作为 操作系统的内核部分 ,因此 ,需要对操作系统有一定的了解 。 2 W indow s CE. N ET系统及其设备驱动 2. 1 W indow s CE. NET的系统体系结构 一个基于 W indow s CE. NET 的平台主要由以下几部分 组成 : W indows CE. NET内核组件 , OAL层和驱动程序 。OAL 层和驱动程序作为目标设备和 W indow s CE. NET 内核组件 之间的接口 ,将操作系统上层与硬件隔离 ,从而便于支持硬件 扩展和即插即用功能 。图 2 详细描述了它们之间的关系 。 图 2 基于 W indows CE. NET的目标平台及其组件 此外 ,对于非常规性硬件设备 (非本机设备 ) ,微软并没 有提供任何相类似的驱动代码 ,则需要获取第三方 (硬件厂 商 ) 的支持 ,由他们提供 W indow s CE 的驱动 ,或者使用者自 行开发 。由于驱动涉及直接对硬件进行操作 ,因而开发者不 仅要了解硬件所能实现的功能以及应用操作系统的驱动架 构 ,而且必须清楚其内部的硬性约定逻辑 ,并拥有特定的调试 手段和调试方法 。 2. 2 W indow s CE. NET设备驱动程序的特点 W indow s CE. NET主要有两种设备驱动类型 : 本机设备 和流接口 。值得注意的是这些驱动模型是专门针对 W indow s CE. NET的 , 不 支 持 W indow s 9X / NT/ 2000 。在 本 质 上 , W indow s CE. NET的设备驱动程序都是一些 DLL 文件 (动态 链接库 ) ,可以用标准的 W indow s CE. NET AP I(基于 W IN32) 实现 。这些 DLL文件向内核提供了一些入口函数 ,使设备管 理模块可以通过这些函数与具体的硬件设备进行通信 [2 ] 。 本机设备是指集成到目标平台的设备 ,这类设备包括显   收稿日期 : 2005 - 06 - 20  基金项目 :广东省重点科技攻关项目 (2002C1020407 / 2003A1040703)   作者简介 :吴凡 (1980 - ) ,男 ,广东广州人 ,硕士研究生 ,主要研究方向 :制造过程信息及嵌入式系统开发 ;  赖乙宗 ( 1972 - ) ,广西人 ,讲 师 ,博士 ,主要研究方向 :嵌入式实时系统及开放式软 CNC;  李迪 (1965 - ) ,山东青岛人 ,教授 ,博士 ,主要研究方向 :制造过程智能化监控. 12月 吴凡等 :基于 W indow s CE. NET嵌入式数据采集卡的驱动程序设计    42 5 示器 、触摸屏 、串口 、并口 、鼠标键盘等 。本机设备驱动程序的 开发是和操作系统开发一起进行的 ,驱动程序被集成到最终 的 CE映像文件中 。在 Platform Builder中 ,提供了许多本机设 备的驱动程序原代码 。在自行定制操作系统时 ,可以直接将 目标平台上的本机设备驱动程序加载到自己的操作系统中 。 而对于在 Platform Builder中没有包括的设备 ,就需要自行添 加驱动程序 。 流接口驱动程序是为连接到基于 W indow s CE. NET平 台的 外 部 设 备 设 计 的 。本 文 讨 论 的 数 据 采 集 卡 是 通 过 PC /104总线连接到主板上 ,其设备类型属于外接设备 ,需要 编写流接口驱动程序 。如果将外接设备映射为系统内存的 话 ,流接口驱动程序可以直接和外接设备进行数据 、状态的读 取 。流接口驱动程序的主要任务是把外设的数据和状态传递 给应用程序 。应用程序通过驱动程序 AP I读取函数 ,间接访 问外设 ; 流 驱 动 程 序 使 用 同 一 个 接 口 并 调 用 同 一 个 函 数 集 ———流接口函数 [4 ] 。流接口驱动程序和系统其他部件间 的相互关系如图 3所示 [4 ] 。 2. 3  I/O函数 对每个流接口驱 动程序来说 ,其所要 求的入口点通常就是 标准 的 W IN32 文 件 的 I/O 函 数 , 外 加 内 核所要使用的电源管 理函数 。这些函数由 W inCE 操 作 系 统 的 内核使用 。以下列出 图 3 流接口驱动与系统间的关系 了 W indow s CE. NET流接口驱动程序中应包括的 10 个接口 函数 : xxx_ Init为装载驱动 , xxx_De Init为卸载驱动 ; xxx_PowerOn为打开电源 , xxx_PowerOff为关闭电源 ; xxx_Open为应用程序打开驱动 ; xxx_Close为应用程序关闭驱动 ; xxx_Read为应用程序读取设备相关的数据 ; xxx_W rite为应用程序写入设备相关的数据 ; xxx_Seek为应用程序定位设备标志 ; xxx_ IoControl为应用程序使用设备相关的命令 。 针对不同的外设 ,在实现这 10个函数时有不同的要求 , 某些函 数可 以 只简 单的 返 回 一 个 值 即 可 。应 用 程 序 调 用 CreateFile ( ) ,导致调用流接口驱动中的 xxx_Open函数 ,产 生的句柄提供给应用程序中的读写文件 W IN32函数 ,读写文 件的实际处理过程通过驱动程序中的 xxx_ Read和 xxx_W rite 实现 , 完 成 对 外 设 的 读 写 操 作 , 最 后 应 用 程 序 调 用 CloseHandle函数关闭句柄 ,从而执行驱动程序中 xxx_Close。 释放最初的资源 。 3  数据采集卡驱动程序的开发 下面就开发过程中如何实现这块数据采集卡的驱动程序 来说明具体的开发方法 。我们使用微软的 EVC ( eM bedded VC + + 4. 0)或 M icrosoft V isual Studio . NET来开发驱动程序 , 最终生成 DLL文件 。数据采集卡属于外接设备 ,其驱动程序 模型为流接口驱动程序 。 3. 1 驱动程序设计 驱动程序部分主要任务是实现 W indow s CE. NET流接口 驱动模型所要求的 10个接口函数 。针对数据采集卡 ,应主要 实现设备初始化 ,数据读取和程序关闭三部分 。我们需要实 现诸如 xxx_ Init, xxx_Open, xxx_Read, xxx_W rite等函数 ,但 微软提供的例程中已经提供了这些函数的通用实现 ,可以在 简单修改后使用 。在这 10个代码模块中 ,最重要 ,最复杂的 xxx_ Init 。当设备驱动程序被调用时 ,设备管理器调用该函数 对板卡进行初始化操作 ,如读取注册表分配资源 ,中断服务线 程初始化等 。当该函数为驱动程序分配资源时 ,采用了如下 数据结构 : struct IO _DEV ICE_ INFO { DWORD DeviceName[16 ]; / /采集卡名称 DWORD IOBase ; / /采集卡基地址 DWORD IOLen ; DWORD IRQ ; / /采集卡地址长度 / /采集卡中断号 DWORD DevIndex ; HANDLE h IstEvent; / /采集卡设备序号 / / IST事件 }TIO _DEV ICE_ INFO , 3 PTIO _DEV ICE_ INFO; 再定义一个调用函数 : DWORD IO _ Init(DWORD dwContext) { IO _DEV ICE_ INFO pDex; GetRegParam s(dwContext, pDex) ; pDex - > IOBase = 0X230; pD ex - > SysIntr = SYSINTR _ F IRMWARE + pDex - > IrqNo; ∗ return (DWORD ) pDex; } 当内核接收到宏 IOCTL _ IO IN IT消息后 ,就调用该函数 。 3. 2 驱动程序的安装 W indow s CE. NET有两种装入流接口驱动程序的方法 。 其中一种由设备管理器启动时装入 ,另一种由用户应用程序 自行装入 。所有的流接口驱动程序 ,无论是在系统启动时装 入或自行装入 ,与系统中其他组件都有相似的相互作用 。 当一个基于 W indow s CE. NET的平台启动时 ,设备管理 器开 始 运 行 。它 依 次 读 取 注 册 表 中 HKEY _ LOCAL _ MACH INE \D rivers\Builtin的键值 ,并将所有列于其中的流接 口驱动程序装入系统 。例如 ,在 W indow s NT平台上 ,设备管 理器都是通过该方法装入键盘鼠标的驱动程序 。 当设备管理器不能自动探测到连接到平台上的外设时 , 就必然要采用第二种装入方法 ,此时使用该设备的应用程序 必须自己装载驱动程序 。流接口驱动程序通过文件系统调用 的方式从设备管理器和应用程序接受命令 ,并压缩所有必要 的信息以便将这些命令“翻译 ”成适当的动作 。同时 ,将下列 内容添加到注册表中 : HKEY_LOCAL _MACH INE \D rivers\ IO " Prefix" = " P IO " "D ll" = " PC104_ IO. dll" " Index" = dword: 1 "O rder" = dword: 1 " IoBase" = dword: 230 " IoLen" = dword: 10 " Irq" = dword: 7 将写 好 的 驱 动 程 序 dll 文 件 ( PC104 _ IO. dll) , 放 到 w indow s目 录 下 , 再 调 用 : ActivateDevice ( ) 函 数 将 HKEY _ LOCAL _MACH INE \D rivers \ IO 的信息加载到系统内存中 ,驱 动程序就加载完成 。 3. 3 驱动程序的调试 设备驱动程序没有界面 ,完全在系统底层运行 , 为了观 察驱动程序的运行状态 ,需要用户编写调试程序用于检验设 (下转第 428页 )    42 8    计算机应用 2005年 求派定优先级 。它允许应用程序根据具体的 QoS需求和可用 的操作系统支持来灵活地指定不同的调度策略 ,对现有的调度 策略集合进行拓展而不影响其他应用程序所使用的策略 。 实时系统中存在很多广泛使用的调度策略 ,下面对几种 常用的调度策略进行了总结 ,概述如下 : 1)固定优先级调度 固定优先级调度根据量化的优先级 ,提供抢占式调度和 派发机制 。当高优先级线程创建或者就绪时 ,它就抢占正在 执行的低优先级的线程 。 2)最早死线优先 ( EDF) 最早死线优先策略以线程执行的死线作为判断依据 ,即 具有最短死线的任务具有最高优先级 。在硬实时系统中 ,要 求所有任务的死线都能得到满足 ;软实时系统中要求满足尽 可能多的死线 。 EDF策略既可以作为调度策略 ,也可以作为 派发规则 。 3)最短空闲时间优先 (LLF) 最短空闲时间优先策略根据任务的空闲时间分配优先 级 , (空闲时间 =死线 - 当前时间 - 估计剩余执行时间 ) 。具 有较短空闲时间的任务具有较高的优先级 。在线程的执行时 间要求变化很大的情况下 ,需要使用最短空闲时间优先级策 略 。LLF既可以作为调度策略也可以作为派发规则 。 4)最紧急优先调度 MUF (M aximum U rgency First) 最紧急优先调度综合了固定优先级算法和动态优先级算 法的优点 , 它的优先级包括静态部分和动态部分 。其中静态 优先级按 RM 算法分配 ,动态优先级按 EDF算法或 LLF算法 分配 。它既可充分利用处理器资源 ,又能在发生暂时过载时 保证关键任务不受影响 。 3  实时性能测试 3. 1 测试环境 为了能够更好地体现 rtORB 的实时性能 ,我们的测试在 Solaris平台上进行 。 Solaris提供了对实时线程的调度 ,为分 派应用或内核线程执行提供了最坏保证 。另外 , Solaris为互 斥和按优先级顺序排队 /分派线程实现了优先级继承协议 。 测试的结果如图 3所示 。 3. 2 测试结果分析 TAO 作为一个优良的实时 CORBA 产品 ,它具有很好的 实时性能 ,特别是当通信能提供实时性时 ,它可以支持硬实时 应用 。为此 , DARPA 将其作为国防部实时 CORBA 评测选件 之一 ,本文也是以 TAO 为参考 ,将 rtORB与之进行比较 。 图 3给出了随着低优先级客户数的增加 ,双向操作的平 均延迟的变化 。首先看高优先级客户的延迟变化 。从总体上 讲 ,二者的延迟变化都较小 ( TAO 的延迟变化 = 2 171 (低优先 级客户数为 50时的延迟 ) - 2 017 (低优先级客户数为 0时的 延迟 ) = 154μs, rtORB的延迟变化 = 2 069 (低优先级客户数为 5 0时 的 延 迟 ) - 1 9 9 3 (低 优 先 级 客 户 数 为 0时 的 延 迟 ) = 76μs) 。这说明 rtORB和 TAO 的高优先级的客户都具有很好 的实时性 。但是当低优先级客户数大于 50后 , TAO的高优先 级客户的延迟比较稳定 ,而 rtORB 有逐渐增加的趋势 。再看 低优先级客户的延迟变化 。二者的延迟都在逐渐增加 。特别 是当低优先级客户数大于 40后 ,延迟增加非常明显 ,到低优 先级客户数为 45时 ,延迟已经大于 10 000μs(数值太大 ,图中 未示出 ) 。这是因为 ,此时由于系统中的线程数太多 ,机器内 存太小 (128M ) ,一部分线程需要被置换出内存空间 ,放于虚 拟空间上 。而被置换出内存空间的线程主要是那些低优先级 的线程 。因此 ,低优先级客户的延迟会迅速增大 。 综上所述 , rtORB完全可以用于实时应用 。 图 3 rtORB 和 TAO 延迟的比较 (本地 ) 4  结语 随着全球商业竞争的加剧 ,对软件产品质量和成本控制 的要求越来越高 。同样 ,分布式对象计算技术也在不断发展 , CORBA 在实时系统中将得到越来越广泛的应用 。本文归纳 总结了实时 CORBA系统实现框架的重要组成部分及其关键 技术 ,并对 rtORB 进行了性能测试 ,测试的结果表明 , rtORB 完全可以用于实时应用 。 参考文献 : [1 ] SCHM IDT DS, KUHNS F. An Overview of the Real2time CORBA Specification [A ]. the June 2000 IEEE Computer Special Issue on Object2O riented Real2time D istributed Computing[C ], 2000. [2 ] Object Management Group. The Common Object Request B roker: A rchitecture and Specification [ S ]. OMG Document, 2. 3 ed, 1999. [3 ] FENG WC, SYYID U , L IU W S. Providing for an open real2time CORBA [A ]. Proceedings of the IEEEWorkshop on M iddleware for D istributed Real2Time System and Services[ C ]. IEEE, 1997. 135 - 141. [4 ] GILL CD , LEV INE DL, SCHM IDT DC. The Design and Perform2 ance of a Real2Time CORBA Scheduling Service [ J ]. Real2Time System s, 2001, 20 (2) : 117 - 154. [5 ]  LEV INE DL , FLORES2GA ITAN S, SCHM IDT DC. An Emp irical Evaluation of OS Support for Real2time CORBA Object Request B ro2 kers[A ]. the Real2Time Technology and App lications Symposium (RTAS) [C ], 1999. [6 ] DENG Z, L IU JW 2S, ZHANG L , et a l. An Open Environment for Real2Time App lications[J ]. Real2Time System s, 1998, (4). (上接第 425页 ) 备驱动程序 。调试设备驱动程序需要两台计算机 , 一台为主 机 ( PC机 ) ,观察运行情况 。另一台为目标机 (嵌入式计算 机 ) ,运行设备驱动程序 , 两台计算机用串口线连好 ,进行一 系列软件设置 ,就可以开始调试 。要从主机可以观察目标机 上驱动程序的运行情况 ,最常用的调试手段是在驱动程序中 必要的位置加入 RETA ILM SG ( ) 函数 ,这个函数可以把指定 信息输出到主机窗口中 ,通过分析这些信息 ,可以了解驱动程 序当前的运行情况 。 参考文献 : [1 ] LABROUSSE JJ. 嵌入式系统构件 [M ]. 北京 : 机械工业出版社 , 2003. [2 ] 陈向群 ,王雷 ,马洪兵 ,等. W indows CE. NET系统分析及实验教 程 [M ] . 北京 :机械工业出版社 , 2003. [3 ] MSDN L ibrary for V isual Studio . NET 2003 [OL ]. [4 ] 李长河 ,王永强 ,刘刚 ,等. 嵌入式 W indows CE 设备驱动的研究 实现 [J ] . 微机发展 , 2003 , 13 (7) : 69 - 72.

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。