马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
大家好,我想通过电脑上的一个PCI9052的板卡每次接收到一个中断,应用程序就执行一次指定的函数。我写了windows的C++的应用程序,也照猫画虎写了一个简单的PCI驱动,功能实现了。可问题就是当我循环发送这个中断的时候,电脑会死机!!有时候函数执行了几百次,多的时候能执行几千次,但最后都死机了。死机时不光程序死了,连鼠标都没用了,只用重启。我把我实现这个功能的程序写在了下面,各位大侠帮忙看看会是哪的问题呢?是不是我的应用程序和驱动程序这种交互方式有问题? 应用程序: 先使用下面语句创建了一个事件 hDecodeEvent =CreateEvent(NULL,FALSE,FALSE,NULL);
把上面的事件传给驱动程序 //向NCDIVER下传译码线程事件 bResult= DeviceIoControl(hDevice, //device to be queried NC_TRANSMIT_EVENT, //operation to perform &hDecodeEvent,sizeof(hDecodeEvent), // inputbuffer NULL,0, //output buffer &junk, //# bytes returned (LPOVERLAPPED)NULL); //synchronous I/O
在一个线程中死循环等待驱动程序激活这个事件,一旦激活就调用一个函数 DWORD WINAPI DecodeWaitThreadProc(LPVOIDlpParam) { while(1) { WaitForSingleObject(hDecodeEvent,INFINITE); //等待事件激活 InterpdllCallbackFunction(); //激活后调用这个函数 } return0; } 驱动程序: 在驱动程序中这样接收事件 caseNC_TRANSMIT_EVENT: pdx->hUserDecodeEvent= *(HANDLE*)Irp->AssociatedIrp.SystemBuffer; status=ObReferenceObjectByHandle(pdx->hUserDecodeEvent, EVENT_MODIFY_STATE, *ExEventObjectType, KernelMode, (PVOID*) &pdx->pDecodeEvent, NULL); break; 驱动程序接收到中断后这样设置事件来通知应用程序 if(pdx->pDecodeEvent != NULL) KeSetEvent(pdx->pDecodeEvent,IO_NO_INCREMENT,FALSE);//通知应用程序,中断的到来 |