Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:2858回复:8

中断与DPC的问题,很急~~(100分)

楼主#
更多 发布于:2003-03-14 20:31

最近碰到一个问题,
设备报中断,然后我申请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各有一些数据

那位朋友知道这都是什么原因导致的,如何解决??
直到的一定要帮助帮助我呀,解决了一定放分~~

最新喜欢:

XmanXman
<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
cybercat
驱动牛犊
驱动牛犊
  • 注册日期2001-03-27
  • 最后登录2005-07-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-14 21:43
你的中断频率有多快。
我用DriverStuduio写的驱动,中断频率是1k,本想在dpc里做一些事情,但不到10分钟就死,后来把dpc去掉(是在中断里去掉和dpc相连的那个函数),结果就好了
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-14 22:49

最近碰到一个问题,
设备报中断,然后我申请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各有一些数据

那位朋友知道这都是什么原因导致的,如何解决??
直到的一定要帮助帮助我呀,解决了一定放分~~
 


一个dpc占用的时间太长了? :D
[color=red]大头鬼! :P[/color]
ppl
ppl
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2006-05-21
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于: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的文档就清楚了。

 




X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-15 00:16
简单说就是中断套中断
Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-03-18 11:55
你的中断频率有多快。
我用DriverStuduio写的驱动,中断频率是1k,本想在dpc里做一些事情,但不到10分钟就死,后来把dpc去掉(是在中断里去掉和dpc相连的那个函数),结果就好了


终于上来了,前几天不知道为什么,上不来:(

我的中断不频繁,大约50~100左右,肯定不是频繁的原因
<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-03-18 11:58
一个dpc占用的时间太长了? :D


这个倒是没有具体测量,应该不会很长。
因为我每次中断的数据都一样,为什么每次开始几百个都没问题呢。
而且dpc就是为了给长时间处理用得呀
<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-03-18 12:36
// 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的文档就清楚了。
 


没有线程同步呀,所有的操作就是I/O访问,while(1)循环(有退出条件),
KeSetEvent((PRKEVENT)pDevExt->pInterruptEvent, 0, FALSE);
如此而已。
这也都应该使没问题的呀
<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
bbear
驱动小牛
驱动小牛
  • 注册日期2002-08-20
  • 最后登录2009-04-16
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-03-18 14:31
[quote]// 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的文档就清楚了。
 


没有线程同步呀,所有的操作就是I/O访问,while(1)循环(有退出条件),
KeSetEvent((PRKEVENT)pDevExt->pInterruptEvent, 0, FALSE);
如此而已。
这也都应该使没问题的呀
 [/quote]

可以 POST 你的 DpcForIsr()相晷
游客

返回顶部