qdyangjing
驱动小牛
驱动小牛
  • 注册日期2003-02-26
  • 最后登录2005-11-16
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:807回复:3

我的程序有什么问题?

楼主#
更多 发布于:2003-02-28 20:06
我要响应IRQ=3中断     手机联系:13831342504   工程急需  
//略.........
#define MY_IRQ    3
..............

class  MyInt: public  VHardwareInt
{
    MyInt():VHardwareInt(MY_IRQ,0,0,0){};
    virtual VOID OnHardwareInt(VMHANDLE);
}

class MyDecice: public VDevice
{
 public:
    MyInt*pIRQ;
    virtual BOOL OnSysDynamicDeviceInit();
    virtual BOOL OnSysDynamicDeviceExit();
    virtual DWORD OnW32DeviceIoControl(PIOCTLPARAMS pParam);

}
//实现文件:
//略....
VOID MyInt::OnHardwareInt(VMHANDLE hVM)
{
     dout<<\" I am Waiting......\"<<endl;
}

//略......
//pIRQ 在MyDevice 的初始化函数中初始化,并用hook()把IRQ=3与
OnHardwareInt()挂接
可是从来没有响应过


 :(
***************************** *********向军旗敬礼!******** ********向给分者微笑!******* *****************************
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-03-01 02:21
VOID MyInt::OnHardwareInt(VMHANDLE hVM)
{
     dout<<\" I am Waiting......\"<<endl;
     // 干活:)
     // 清除硬件上的中断标志,如果有的话
     sendPhysicalEOI();
}

 :(


BTW,是PCI的还是ISA的?估计是ISA的吧?
qdyangjing
驱动小牛
驱动小牛
  • 注册日期2003-02-26
  • 最后登录2005-11-16
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-02 13:29
sendPhysicalEOI();
函数我也用了,不行。

我的卡在ISA上由单片机控制,不需要初始化,只要接收数据就可以了


我是不是必须开IRQ=3才行?
因为我挂IRQ=8 可以,3就不行

***************************** *********向军旗敬礼!******** ********向给分者微笑!******* *****************************
qdyangjing
驱动小牛
驱动小牛
  • 注册日期2003-02-26
  • 最后登录2005-11-16
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-02 13:46
看头文件:   为什么不响应 IRQ=3

// HKWTXK.h - include file for VxD HKWTXK

#include <vtoolscp.h>

#define DEVICE_CLASS HkwtxkDevice
#define HKWTXK_DeviceID UNDEFINED_DEVICE_ID
#define HKWTXK_Init_Order UNDEFINED_INIT_ORDER
#define HKWTXK_Major 1
#define HKWTXK_Minor 0

//通讯卡占用的中断号:IRQ=3
#define HKWTXK_IRQ     3

//通讯卡端口地址
#define HKWTXK_IN1     0x300
#define HKWTXK_IN2     0x301

//定义虚拟硬件中断类HkwtxkInt,方式:独占IRQ=3
class HkwtxkInt : public VHardwareInt
{
public:
HkwtxkInt():VHardwareInt(HKWTXK_IRQ,0,0,0){}; //定义构造函数
virtual VOID OnHardwareInt(VMHANDLE);  //重载中断通知处理成员函数
};

//定义虚拟设备类HkwtxkDevice
class HkwtxkDevice : public VDevice
{
public:
HkwtxkInt * pIRQInt;
virtual BOOL OnSysDynamicDeviceInit();
virtual BOOL OnSysDynamicDeviceExit();
virtual DWORD OnW32DeviceIoControl(PIOCTLPARAMS pDIOCParams);
};

看实现文件:

// Hkwtxk.cpp - main module for VxD HKWTXK

#define DEVICE_MAIN
#include \"hkwtxk.h\"
Declare_Virtual_Device(HKWTXK)
#undef DEVICE_MAIN

//接收到的数据
unsigned char valuein;

//重载中断响应函数
VOID HkwtxkInt::OnHardwareInt(VMHANDLE hVM)
{
dprintf(\"I am waiting for you .........\");
sendPhysicalEOI();
}

//当W32调用CreateFile()时,此函数被VPICD调用
BOOL HkwtxkDevice::OnSysDynamicDeviceInit()
{
dprintf(\"StartInt!\");

pIRQInt=new HkwtxkInt();

//分配pIRQInt内存不成功,挂接OnHardwareInt()
if((!pIRQInt) || (!pIRQInt->hook()))
{
return FALSE;
}

pIRQInt->physicalUnmask();

    dprintf(\"OnSysDynamicDeviceInit\");

return TRUE;
}

//当W32调用CloseHandle()时,此函数被VPICD调用
BOOL HkwtxkDevice::OnSysDynamicDeviceExit()
{
if(pIRQInt)
{
delete pIRQInt;
}
  
    dprintf(\"OnSysDynamicDeviceExit\");

return TRUE;
}

//用于W32与HKWTXK.VxD接口
DWORD HkwtxkDevice::OnW32DeviceIoControl(PIOCTLPARAMS pDIOCParams)
{
return 0;
}

***************************** *********向军旗敬礼!******** ********向给分者微笑!******* *****************************
游客

返回顶部