COM组件技术在现场总线控制系统组态软件中的应用
transfersign;//初始化是否成功标志
DWORDdwSegmentaddress=bSegmentAdd;//适配器段地址
HANDLEhDevice=NULL;//指向线性指针对句柄
LpBaseAddress=(PBYTE)cardctrl.MapLinearAddress(dwSegmentaddress,0x400,hDevice);
//调用VxD函数,获得指向ISA总线物理地址的线性地址指针
cardctrl,UnMapLinearAddress(lpBaseAddress,hDevice);
//关闭VxD
//调用适配器初始化函数
_outp(0x310,0x01);//打开邮箱锁
lpBaseAddress[0x3F0]=bSrcNodeNumber;//上位机节点号
lpBaseAddress[0x3F1]=bRate;//波特率
lpBaseAddress[0x3F8]=0xC6;//适配器初始化命令字
DrvDelay(20,false);//延时20ms
…………//初始化后其它操作
_outp(0x310,00);//关闭邮箱锁
returnS_OK;
}
4虚拟设备驱动程序
VxD是虚拟设备驱动程序(VirtualDeviceDriver)的缩写,中间的x表示某一设备。它能够无限制地访问所有硬件设备、自由地检测操作系统的数据结构(如描述符和页表)以及访问任何内存位置。
本文中,VxD将ISA总线对应的物理地址转换成段线性地址,供应用程序使用。VxD的开发工具是VtoolsD,转换时用的函数为MapPhysToLinear。以下是部分程序代码:
//定义结构体
typedefstruct_MapDevRequest
{
PVOIDmdr_PhysicalAddress;DWORDmdr_SizeInBytes;
PVOIDmdr_LinearAddress;WORDmdr_Status;
}MAPDEVREQUEST,*PMAPDEVREQUEST;
#include<vtoolscp.h>
//包含其它头文件
…………
PARAMSpDIOCParams
{
PMAPDEVREQUESTpRea;//自己定义的结构体
switch(pDIOCParams->dioc_IOCtlCode)
{
caseDIOC_OPEN:
caseDIOC_CLOSEHANDLE:break;
caseMDR_SERVICE_MAP:
pReq=*(PMAPDEVREQUEST*)pDIOCParams-& 《COM组件技术在现场总线控制系统组态软件中的应用(第4页)》
本文链接地址:http://www.oyaya.net/fanwen/view/145332.html
DWORDdwSegmentaddress=bSegmentAdd;//适配器段地址
HANDLEhDevice=NULL;//指向线性指针对句柄
LpBaseAddress=(PBYTE)cardctrl.MapLinearAddress(dwSegmentaddress,0x400,hDevice);
//调用VxD函数,获得指向ISA总线物理地址的线性地址指针
cardctrl,UnMapLinearAddress(lpBaseAddress,hDevice);
//关闭VxD
//调用适配器初始化函数
_outp(0x310,0x01);//打开邮箱锁
lpBaseAddress[0x3F0]=bSrcNodeNumber;//上位机节点号
lpBaseAddress[0x3F1]=bRate;//波特率
lpBaseAddress[0x3F8]=0xC6;//适配器初始化命令字
DrvDelay(20,false);//延时20ms
…………//初始化后其它操作
_outp(0x310,00);//关闭邮箱锁
returnS_OK;
}
4虚拟设备驱动程序
VxD是虚拟设备驱动程序(VirtualDeviceDriver)的缩写,中间的x表示某一设备。它能够无限制地访问所有硬件设备、自由地检测操作系统的数据结构(如描述符和页表)以及访问任何内存位置。
本文中,VxD将ISA总线对应的物理地址转换成段线性地址,供应用程序使用。VxD的开发工具是VtoolsD,转换时用的函数为MapPhysToLinear。以下是部分程序代码:
//定义结构体
typedefstruct_MapDevRequest
{
PVOIDmdr_PhysicalAddress;DWORDmdr_SizeInBytes;
PVOIDmdr_LinearAddress;WORDmdr_Status;
}MAPDEVREQUEST,*PMAPDEVREQUEST;
#include<vtoolscp.h>
//包含其它头文件
…………
PARAMSpDIOCParams
{
PMAPDEVREQUESTpRea;//自己定义的结构体
switch(pDIOCParams->dioc_IOCtlCode)
{
caseDIOC_OPEN:
caseDIOC_CLOSEHANDLE:break;
caseMDR_SERVICE_MAP:
pReq=*(PMAPDEVREQUEST*)pDIOCParams-& 《COM组件技术在现场总线控制系统组态软件中的应用(第4页)》