阅读:807回复:3
我的程序有什么问题?
我要响应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()挂接 可是从来没有响应过 :( |
|
|
沙发#
发布于:2003-03-01 02:21
VOID MyInt::OnHardwareInt(VMHANDLE hVM) BTW,是PCI的还是ISA的?估计是ISA的吧? |
|
板凳#
发布于:2003-03-02 13:29
sendPhysicalEOI();
函数我也用了,不行。 我的卡在ISA上由单片机控制,不需要初始化,只要接收数据就可以了 我是不是必须开IRQ=3才行? 因为我挂IRQ=8 可以,3就不行 |
|
|
地板#
发布于: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; } |
|
|