我要响应IRQ=3中断 工程急需 
//略.........
#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()挂接
可是从来没有响应过请各位大侠帮我解决一下哦?

解决方案 »

  1.   

    我受朋友coofucoo的委托,回此问题。鄙人意见,仅供参考。
    我曾在C写的VxD中成功做出ISR。VToolsD或DriverWorks中带的关于中断的范例程序肯定是没问题的。至于中断不能被响应,可考虑以下几点因素:
      1.IRQ3是分配给COM2的。若你没在程序中写上PNP的代码,则若用此中断请求号,必先在BIOS设置中将COM2 Disalbe掉,并且将BIOS的关于中断请求号的PNP功能关闭,将IRQ3设置为Legacy ISA。
      2.确认你的硬件确实产生中断请求。可用示波器观察。
      3.如何验证中断请求未被响应?再ISR中使用dout可以吗?我不敢确信。常规的做法是,在ISR中调度一个事件,然后在该事件的处理函数中进行dout。ISR是时间紧迫的,不允许有dout这样的语句。
      

  2.   

    设置你的BIOS或许你的IRQ(3)正被别的资源使用。