首 页       用户登录  |  用户注册
设为首页
加入收藏
联系我们
按字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
按声母检索 A B C D E F G H J K L M N O P Q R S T W X Y Z 数字 符号
您的位置: 5VAR论文频道论文中心理工论文电子通信
   采用VXD技术实现实的通信      ★★★ 【字体: 】  
采用VXD技术实现实的通信
收集整理:佚名    来源:本站整理  时间:2009-01-10 22:25:23   点击数:[]    

[本篇论文由上帝论文网为您收集整理,上帝论文网http://paper.5var.com将为您整理更多优秀的免费论文,谢谢您的支持]
摘要:讨论Windows虚拟设备驱动(VXD)技术,并采用此项技术示范性地做出应用于PC串口实时通信的虚拟驱动程序,找到一种可以在PC中实现实时通信的途径。

    关键词:VXD 实时 串口通信

引言

在微软的视窗操作系统中,系统内核掌管所有的应用程序,通过独特的任务调度算法实现CPU的分时多任务处理方式。多任务处理对大多数用户可能是件好事,但是对那些想把实时通信建立在Windows操作系统上的特殊用户来说,操作界面的图形化并不比MS-DOS的单任务更具吸引力。在视窗操作系统里可以进行实时通信和控制码?答案是:VXD技术可以帮我们在获取友好的人机界面的同时还拥有很强的实时性。

1 VXD技术解析

VXD技术可追溯到Windows3.1,它的引入就是要让操作系统实现多工以及硬件资源的共享。为了支持多个MS-DOS任务同时执行,Windows98让每个MS-DOS应用程序在各自的虚拟机(VM)上运行,各自互不相干;而所有的Widnows应用程序却都在一个虚拟机上运行。图1所示的结构框图很好地说明了Windows98的整体架构。

图1中,由众多的VXD组成系统级代码处于最底层。其中,处于中心地位的是一名为VMM32的VXD,它负责协调和管理所有的VXDs。其它VXDs则通过消息机制(这个消息机制由VMM32.VXD来维护)彼此联系。由所有VXDs开放出的服务接口(API)组成了一个服务网,它们彼此通过合作的方式,提供Windows98的系统底层驱动服务。

从以上Windows98系统架构可以看出,要想在视窗平台下获取很强的实时性,仅靠提升应用程序线程优先级的方法是不够的。因为Win32应用程序代码属于Ring3级,而VXD代码则属于Ring0级;采用VXD撰写的实时通信程序可以完全不受代码限制,可以直接对硬件进行操作。VXD的这个特点正是实时通信建立所必须的。

设计实时通信的VXD前,先解释以下几个问题:

①VMM32使用VPICD.VXD虚拟化每个硬件和软件中断。VMM32为每个虚拟机(VM)维护一个IDT结构,当中断发生时,CPU先保护中断现场,然后经由当前VM的IDT把这个中断引导至相应的中断处理程式。

中断的虚拟化,使我们有机会给每个中断提供新的中断处理函数,并可以让多个硬件共享同一个中断号。VPICD.VXD为我们提供这些服务。

②VMM有两个调度器,用以在多个线程和VMs之间实现抢占式多工。主调度器负责选定下一个将被执行的线程。这个选择可以是一个,也可以是多个。然后,主调度器把选择结果送给所谓的时间片调度器,并由后者完成各个应用程序间的时间片分配。调度器也时应用程序经由呼叫Win32线程优先调整API(如SetThreadPriority和SetPriorityClass等)做出回应。当中断发生时,VMM32自动提升中断处理函数所在VM之优先级,保证中断处理函数能及时被执行。

③VXD和Win32应用程序可直接通信。Win32应用程序可通过一个系统API(DevicelOControl(…))来呼叫位于底层的VXD为其服务。在呼叫VXD前,首先必须调用CreatFile(…)这个API加载该VXD(如果该VXD是一个静态VXD,则不用加载)。所有的呼叫动作其实都通过VMM32完成。VXD也可以通过消息方式和位于上层的Win32应用程序通信。She11.VXD为所有希望以消息机制和Win32应用程序通信的VXD提供了这一服务。

以上是编写一个串口通信驱动需要的系统层面知识。对于Windows底层的了解。

2 用VXD实现一个实时串口通信驱动

接下来用VXD技术实现一个实时串行通信的驱动。这个VXD是一个动态(Dynamic)VXD,当它的服务被呼叫时,VMM32会动态加载这个VXD。作者采用的工具是C+98DDK。当然也可以使用其它的工具,如MASM6.11(或更高版本)、VtoolsD。用C搭配DDK完成VXD构建的好处是,可以使用C语言完成绝大部分的程序,程序比较容易阅读和维护。

用C来实现一个VXD驱动,需要准备如下条件:一个.ASM的汇编语言接口文件(在其中定义VXD要处理的系统消息和输出API),一个.C的函数实现文件(在其中完成自己函数实体),一个.DEF的定义文件(在其中定义VXD中各个段的别名并汇成一个DDB)和一个.MAK档(用来编译并连接生成VXD,可有可无)。在这里,仅给出用C实现的函数档。至于其它的文件,可以从本文所列的参考书目或其它文献中找到相关文档的说明。

这个串口通信驱动程序的功能是:实时送出一个Byte的数据,实时接收一个Byte的数据。作为演示之用,并没有加入其它代码。该VXD驱动主要由如下3个系统消息(由VMM32来维护和管理)处理函数组成,其代码如下:

(1)OnSysDynamicDeviceInit()函数

BOOL OnSysDynamicDeviceInit()

{ //OnSysDynamicDeviceInit

irqhandle=VPICD_Virtualize_IRQ((DWORD)(&irq4));

if(irqhandle= =0){

return FALSE;

}

return TRUE; //OnSysDynamicDeviceInit

}

该函数用来完成VXD初始化所做的工作。在本例中,由于实时监视串口中断的需要,要给COM1的中断安装一个自定义的断服务函数。98DDK已经提供了这个函数的C语言版,其原型是HIRQ static VPICD_Virtualize_IRQ(PVID pvid),在vpicd.h中。该函数需要一个指针作为参数(指向名为VPICD_IRQ_Descriptor的结构体),函数传回一个指

[1] [2] [3]  下一页


Tags:


文章转载请注明来源于:5VAR论文频道 http://paper.5var.com。本站内容整理自互联网,如有问题或合作请Email至:support@5var.com
或联系QQ37750965
提供人:佚名
  • 上一篇文章:USB2.0控制器CY7C68013特点与应用

  • 下一篇文章:低功耗超大存储容量的动态心电记录仪的设计
  • 返回上一页】【打 印】【关闭窗口
    中查找“采用VXD技术实现实的通信”更多相关内容 5VAR论文频道
    中查找“采用VXD技术实现实的通信”更多相关内容 5VAR论文频道
    最新热点 最新推荐 相关新闻
  • ››嵌入式系统的通信规约管理平台设计...
  • ››一种基于七号信令的局间话单采集系...
  • ››对于变频器的制动技术分析
  • ››电子文件管理元数据宏观结构多维分...
  • ››浅论卫星电视接收机的常见故障的检...
  • ››信息时代网络用户信息检索焦虑的心...
  • ››论GIS在高校房产管理中的实际应用
  • ››关于电力通信发展战略的思考 金李莎...
  • ››2G、3G切换精细化优化分析思路探讨...
  • ››光纤自动化生产的需求与时机
  • ››采用VXD技术实现实的通信
  •   文章-网友评论:(评论内容只代表网友观点,与本站立场无关!)
    关于本站 - 网站帮助 - 广告合作 - 下载声明 - 网站地图
    Copyright © 2006-2033 5Var.Com. All Rights Reserved .