阅读:3002回复:8
中断与DPC的问题,很急~~(100分)最近碰到一个问题, 设备报中断,然后我申请DpcForIsr,在DPC里接收数据(I/O,not DMA),接收几百次或1000多次以后,softice谈出弹出,提示KeBgCheckEx监察到错误, ErrCode = B8,说明为 ATTEMPTED_SWITCH_FROM_DPC, P1=P2=P3=P4=0 我的内存区在设备扩展里,无页面错误。 查ddk也找不到帮助,不知道这个错误什么意思。 后来我把接收数据防到中断处理中,仍然几百次或1000多次左右,有提示错误, ErrCode = E1, 说明为WORKER_THREAD_RETURNED_AT_BAD_IRQL,P1,P2,P3,P4各有一些数据 那位朋友知道这都是什么原因导致的,如何解决?? 直到的一定要帮助帮助我呀,解决了一定放分~~ |
|
最新喜欢:Xman
|
沙发#
发布于:2003-03-14 21:43
你的中断频率有多快。
我用DriverStuduio写的驱动,中断频率是1k,本想在dpc里做一些事情,但不到10分钟就死,后来把dpc去掉(是在中断里去掉和dpc相连的那个函数),结果就好了 |
|
板凳#
发布于:2003-03-14 22:49
一个dpc占用的时间太长了? :D |
|
|
地板#
发布于:2003-03-14 23:17
// MessageText:
// // A wait operation, attach process, or yield was attempted from a DPC routine. // #define ATTEMPTED_SWITCH_FROM_DPC ((ULONG)0x000000B8L) 说明你调用了一个关于线程同步之类的内核函数, 而且需要进行上下文切换。 WORKER_THREAD_RETURNED_AT_BAD_IRQL 根据意思也是差不多的。可能是你调用了需要改变IRQL的函数, 但是你没有保存上下文。 把你调用到的每个函数列出来,看看ddk的文档就清楚了。 |
|
地下室#
发布于:2003-03-15 00:16
简单说就是中断套中断
|
|
5楼#
发布于:2003-03-18 11:55
你的中断频率有多快。 终于上来了,前几天不知道为什么,上不来:( 我的中断不频繁,大约50~100左右,肯定不是频繁的原因 |
|
|
6楼#
发布于:2003-03-18 11:58
一个dpc占用的时间太长了? :D 这个倒是没有具体测量,应该不会很长。 因为我每次中断的数据都一样,为什么每次开始几百个都没问题呢。 而且dpc就是为了给长时间处理用得呀 |
|
|
7楼#
发布于:2003-03-18 12:36
// MessageText: 没有线程同步呀,所有的操作就是I/O访问,while(1)循环(有退出条件), KeSetEvent((PRKEVENT)pDevExt->pInterruptEvent, 0, FALSE); 如此而已。 这也都应该使没问题的呀 |
|
|
8楼#
发布于:2003-03-18 14:31
[quote]// MessageText: 没有线程同步呀,所有的操作就是I/O访问,while(1)循环(有退出条件), KeSetEvent((PRKEVENT)pDevExt->pInterruptEvent, 0, FALSE); 如此而已。 这也都应该使没问题的呀 [/quote] 可以 POST 你的 DpcForIsr()相晷 |
|