中断中DPC的应用

dongbeibei669 2010-09-07 11:47:12
实现目标:一、1等待允许发送新数据中断、2将应用层40个字节数据发送至驱动、3将数据从IRP中调出,来一个中断发送发送一个自动发送一个数据。完成后反馈给应用程序允许发送新数据中断。
二、有收数中断来。接受数据。来一个中断接收一个数据,接收满40个数据发送给应用层允许收数中断,读出40个数据。

目前实现:1不等待中断,将应用层数据发送至驱动。从IRP中可以读出应用层来的数据。2ISR可以响应外设的中断信号,发送一个数据或接受一个数据。

存在问题:不能从IRP中将应用层来的数据放到ISR中。即中断中的数据不能与应用层交互

请教解决办法

指导办法(别人告诉我,或者网页上搜的)要得到IRP中的数据是不是一定要IoGetCurrentIrpStackLocation。如果是我将这个放到ISR中,中断一来,立马死机。还有别的办法得到吗?
2需要用到DPC
我已经注册了startIO例程。初始化了IoInitializeDpcRequest(fdo,DpcForIsr);在ISR中加了IoRequestDpc(pdx->fdo, NULL, pdx);一来中断,立马重启。只要加IoRequestDpc(pdx->fdo, NULL, pdx);就会出现这个情况的。
操作系统windowsXP+ddk+vc6.0

看来应该是我对驱动中断的理解存在偏差。目前正在看书学习中。希望做过驱动中断的给予帮助。有完成的中断例程在条件允许的情况下希望能够共享,对比一下我的问题所在。
...全文
159 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jronald 2010-09-16
  • 打赏
  • 举报
回复
这就不清楚了
我记得ISR要求不可分页内存
不知道是不是这个问题
dongbeibei669 2010-09-15
  • 打赏
  • 举报
回复
对啊,这个我知道啊。具体怎么做呢?您有没有遇到过重启的情况呢?
jronald 2010-09-14
  • 打赏
  • 举报
回复
ISR只负责处理中断,而且处理时间不可太久,所以把需要长时间处理的内容,可用一个函数,放到DPC队列,这个函数调用是异步的,可在函数通知驱动完成动作(比如事件等)。
dongbeibei669 2010-09-13
  • 打赏
  • 举报
回复
不是啊,是windows驱动,应该还是软件的范围呢。
zyj_604 2010-09-07
  • 打赏
  • 举报
回复
帮顶,属于硬件的知识了,不了解啊

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧