保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

采用VXD技术实现实的通信


>  该函数用来完成VXD初始化所做的工作。在本例中,由于实时监视串口中断的需要,要给COM1的中断安装一个自定义的断服务函数。98DDK已经提供了这个函数的C语言版,其原型是HIRQstaticVPICD_Virtualize_IRQ(PVIDpvid),在vpicd.h中。该函数需要一个指针作为参数(指向名为VPICD_IRQ_Descriptor的结构体),函数传回一个指向该虚拟IRQ的句柄(该句柄在后来的VPICD服务中需要提供)。VPICD_IRQ_Descriptor结构体的组成为:
  
  typedefstructVPICD_IRQ_Descriptor{
  
  USHORTVID_IRQ_Number;//IRQ号(0~15)
  
  USHORTVID_Options;//标志位选项
  
  ULONGVID_Hw_Int_Proc;//硬件中断服务程序的地址
  
  ULONGVID_Virt_Int_Proc;//虚拟中断服务程序
  
  ULONGVID_Mask_Change_Proc//MaskChange调用例程
  
  ULONGVID_IRET_Proc;//IRET调用例程
  
  ULONGVID_IRET_Time_Out;//在Vm的进程优先级提升之前的最大等待时间
  
  ULONGVID_Hw_Int_Ref;//硬件中断服务程序的数据存放地址
  
  }VID;
  
  其中只用到三位。在本例中需要声明一个名为irq4的全局变量为VID结构,并付给如下初值:VIDirq4={4,0,hwproc,0,0,0,0,500,0},表示将要虚拟化IRQ4,改变其中断处理函数为voidhwproc(void),该函数的原型如下:
  
  voidhwproc(void){
  
  _asm{
  
  movdx,0x3f8
  
  inal,dx
  
  movbyteptr[readin],al
  
  clc
  
  }
  
  return;
  
  }
  
  在这个中断处理中,仅仅从COM1的数据寄存器(地址为3F8h)中读取接收到的数值,并把该数值存放在一个类型为BYTE、名为readin的内存中。
  
  (2)OnSysDynamicDeviceExit()函数
  
  BOOLOnSysDynamicDeviceExit()
  
  {
  
  VPICD_Force_Default_Behavior(irqhandle);
  
  //解除IRQ4虚拟化
  
  returnTRUE;
  
  }//OnSysDynamicDeviceExit
  
  该数提供了用于善后处理VXD在卸载时需要完成的事件。在本例中,和VXD初始化对应,需要解除对COM1的中断IRQ4的虚拟化。作者也是用98DDK在vpicd.h中提供的外包函数voidstatic_inlineVPICD_Force_Default_Behavior(HIRQhirp)。该函数唯一需要的参数便是使用VPICD_Virtualize_IRQ函数传回的IRQ句柄。
  
  (3)OnDeviceIoControl()函数
  
  DWORDOnDeviceIoControl(PDIOCPARAMETERSp){
  
  Switch(p->dwIoCon
  
  
  
  trolCode)
  
  {
  
  case1://端口写功能
  
  if(!p->lpvOutBuffer||p->cbOutBuffer<1)
  
  {//输出缓存的有效性检查
  
  returnERROR_INVALID_PARAMETER;
  
  }
  
  if(serial_out((DWORD)(p->lpvInBuffer)))
  
  {//数据发送
  
  *(BYTE*)(p->lpvOutBuffer)=*(BYTE*)(p->lpvInBuffer);
  
  }
  
  else{
  
  *(BYTE*)(p->lpvOutBuffer)=0;
  
  }
  
  open_int();//打开com1中断
  
  return0;
  
  case2://端口读功能
  
  if(*(BYTE*)reading==0x00)
  
  {//数据读入
  
  *(BYTE*)(p->lpvOutBuffer)=0x00;
  
  return0;
  
  }
  
  *(BTYE*)(p->lpvOutBuffer)=*(BYTE*)(readin);
  
  return0;
  
  }
  
  return0;
  
  }
  
  return0;
  
  }
  
  OnDeviceIoControl函数用来处理Win32应用程序对VXD的呼叫

《采用VXD技术实现实的通信(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/173349.html

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。