欢迎来到天天文库
浏览记录
ID:24612773
大小:52.50 KB
页数:4页
时间:2018-11-15
《采用vxd技术实现实的通信》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、采用VXD技术实现实的通信
2、第1lunal>关键词:VXD实时串口通信引言在微软的视窗操作系统中,系统内核掌管所有的应用程序,通过独特的任务调度算法实现CPU的分时多任务处理方式。多任务处理对大多数用户可能是件好事,但是对那些想把实时通信建立在M32会动态加载这个VXD。采用的工具是C+98DDK。当然也可以使用其它的工具,如MASM6.11(或更高版本)、VtoolsD。用C搭配DDK完成VXD构建的好处是,可以使用C语言完成绝大部分的程序,程序比较容易阅读和维护。用C来实现一个VXD驱动,需要准备如下条件:一个.ASM的汇编语言接口文件(在
3、其中定义VXD要处理的系统消息和输出API),一个.C的函数实现文件(在其中完成自己函数实体),一个.DEF的定义文件(在其中定义VXD中各个段的别名并汇成一个DDB)和一个.MAK档(用来编译并连接生成VXD,可有可无)。在这里,仅给出用C实现的函数档。至于其它的文件,可以从本文所列的参考书目或其它文献中找到相关文档的说明。这个串口通信驱动程序的功能是:实时送出一个Byte的数据,实时接收一个Byte的数据。作为演示之用,并没有加入其它代码。该VXD驱动主要由如下3个系统消息(由VMM32来维护和管理)处理函数组成,其代码如下:(1)OnSy
4、sDynamicDeviceInit()函数BOOLOnSysDynamicDeviceInit(){//OnSysDynamicDeviceInitirqhandle=VPICD_Virtualize_IRQ((DETERSp){Ss{DHande;//该VM的句柄DM1关中断moval,0outdx,almovdx,0x3fa;关闭1的FIFO功能moval,0outdx,almovdx,0x3f8;字节发送moval,byteptr[pBuffer]outdx,alpopedxpopeaxpopfdsti}returnTRUE;}seri
5、al_out这个函数体的实现是用汇编语言实现的。因为涉及到很多的端口提供以及CPU的标志(flag)和压栈操作,因此考虑到用汇编语言编写会简化代码。因为此串口传输中,用到了关闭中断的指令(cli),所以,当写操作所要求完成的任务很多时,此关中断指令会让程序的实时性很好地体现出来,但cli指令有效时间过长会导致系统问题,所以还是要谨慎使用。Voidopen_int(void){_asm{movdx,0x3f9;1开中断moval,0x05outdx,al}return;}open_int函数用来把PC串口的中断设备按照需要设立起来。函数体很简单,
6、仅改变了地址为3F9h的内容,意为设置Rxdataready和Linestatus中断位,以便让CPU可以及时在1的中断服务程序里读取串口接收到的字节。以上涉及到串口输入和输出的函数体实现代码中,用到了PC16550UART的资料。至此,一个可用于实时串口通信的VXD驱动程序已经完成。由于篇幅所限,不能将其它必要的文档一同提出来讨论。3ASM汇编器(要求6.0以上版本)及其相关文档拷贝到VC6.0的vc98/u30446目录下。4结论通过以上对VXD技术的简要分析以及一个用VXD实现的通信驱动可以看出,在Windows操作系统中,采用VXD技术
7、,可以很好地克服由多工带来的时延问题,很好地解决了在Windows平台下实时通信的问题。
此文档下载收益归作者所有