采用vxd技术实现实的通信

采用vxd技术实现实的通信

ID:24612773

大小:52.50 KB

页数:4页

时间:2018-11-15

采用vxd技术实现实的通信_第1页
采用vxd技术实现实的通信_第2页
采用vxd技术实现实的通信_第3页
采用vxd技术实现实的通信_第4页
资源描述:

《采用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平台下实时通信的问题。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。