rencrux
驱动牛犊
驱动牛犊
  • 注册日期2002-04-17
  • 最后登录2006-04-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2154回复:12

为什么要丢中断呢?

楼主#
更多 发布于:2002-04-17 15:33
    我做了一个PCI图像采集卡,发现在Windows NT4和DOS操作系统下,都有丢失中断的情况发生,我是这样测试的:
    每次主机向接口卡发出一个信号,PCI卡以8ms的间隔连续发1024个中断,然后停止,然后我查看中断响应的次数,我发现有时候为1024次,但大多数情况是少2、3次,甚至少6、7次。在这里中断信号,是一持续3.8微秒的负脉冲,我把这一宽度加长,并未收到明显的效果! 我不知道为什么,请哪位高手指点一下,不胜感谢。难道Windows NT4.0有这么差么?
    带着这种怀疑,我在DOS下重做同样的实验,得到更奇特、更令我困惑的发现是:中断负脉冲为3.8微秒时,会收到2048或2047个中断;减为1.9微秒时,略显正常,大多数情况是1024次,偶尔为1023次;减到1微秒以下,只能收到几个或十几个中断。请高手们给解释一下这种现象。

如果答的好,请给分!
jst7792
论坛版主
论坛版主
  • 注册日期2001-12-10
  • 最后登录2006-11-16
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-04-17 16:06
作测试的时候是不是把其他的程序都关闭了?
中断处理程序里作了些什么事情?
延迟调用过程作了些什么事情?
兄弟们,给点分吧
rencrux
驱动牛犊
驱动牛犊
  • 注册日期2002-04-17
  • 最后登录2006-04-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-04-17 16:17
jst7792 其他的程序指的是什么?
    其它应用程序都没运行。
    中断服务程序只做记中断响应次数的工作。只保留最简单的响应。
  
如果答的好,请给分!
jst7792
论坛版主
论坛版主
  • 注册日期2001-12-10
  • 最后登录2006-11-16
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-04-17 16:23
其他可能占用系统资源比较大的程序,比如视频播放类.
一般说起来PCI中断是电平响应,如果一直保持电平有效,确实可能导致中断多次重入,这可能是你电平信号长短导致响应次数不一致的缘故.但为什么windows和dos下现象不一致,我还不清楚.
兄弟们,给点分吧
rencrux
驱动牛犊
驱动牛犊
  • 注册日期2002-04-17
  • 最后登录2006-04-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-04-17 16:30
版主: PCI负脉宽有具体规定吗? 我在规范里一直没找着。
     结果似乎是这样的:3.8微秒的宽度,只响应一次,DOS要响应
2次,但都有丢的情况。
如果答的好,请给分!
jst7792
论坛版主
论坛版主
  • 注册日期2001-12-10
  • 最后登录2006-11-16
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-04-18 09:25
这方面好像是没有什么规定.关键是电平响应的中断,系统进入中断处理程序后,会去清除中断源,如果你的中断输入仍然保持有效,那么在这段中断处理做完退出后,系统会再次触发,具体能被触发几次和系统处理速度中断处理内容应该是有关系的.具体为什么会出现丢的情况,暂时我还不清楚.
兄弟们,给点分吧
lvhaow
驱动小牛
驱动小牛
  • 注册日期2001-10-31
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分44分
  • 威望35点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2002-04-18 14:36
你的中断计数在哪里做的?在DPC里还是ISR?如果是DPC,那么在同一个中断源申请的DPC没有处理完之前,相继的中断会被丢弃。如果前一个中断的ISR没有处理完,后继中断会怎么样,我不清楚,好象是被系统排队了吧,有人这么说过。
lvhaow
ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-04-18 17:10
我来帮rencrux回答吧。(我们做的同一个项目,驱动部分是我写的)

中断计数是在ISR中做的,ISR的动作很简单,只读了一个长字的数据,就退出了。应该说,只要内核调度到我的ISR,就不可能丢中断。现在的现象是,内核压根儿没有调我的ISR。Why?? 这是在Windows NT下

在DOS下,ISR连数也不读了,只是计数,仍然会出现中断丢失的情况。这就太奇怪了。硬件软件的原因都可以找找。
没有你,我不知道怎么办...
lvhaow
驱动小牛
驱动小牛
  • 注册日期2001-10-31
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分44分
  • 威望35点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2002-04-18 21:24
  我在做一个数据输出卡,用9052做桥,不支持DMA。因为中断间隔直接关系到缓冲FIFO的大小,所以我一直关注这方面的话题。
  内核驱动版上有人做过PCI中断间隔的实验,在ISR中读系统时间并记录,由于中断间隔是一致的,故理论上读出的时间间隔也应是一致的。但实际上实验结果误差却达70MS。
  70MS的误差说明什么?是响应速度慢还是有更高级别的中断造成的?不管什么原因,只要这个延时存在,如果中断间隔太短,则可能一大串中断被压在队列里(假设这个队列存在的话)。系统会不会在某中断未处之前丢弃同一中断源发出的新中断,就象DPC未处时丢弃中断一样,这也不清楚。但《WDM驱动开发》一书上介绍DPC处理过程时强调了丢弃中断的问题,并建议硬件设计者不能产生过多的中断。可惜多少算过多,书上没说,所以我把我的硬件的中断间隔定在140MS的级别上,FIFO加到384K,应该不会再有中断的问题。
lvhaow
huangco
驱动牛犊
驱动牛犊
  • 注册日期2001-10-15
  • 最后登录2009-04-17
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-04-29 15:00
一般来说电平中断,中断保持
中断响应后,中断源要清
它就不会丢了
我是在哪里?
julan
驱动小牛
驱动小牛
  • 注册日期2001-11-23
  • 最后登录2005-04-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-04-29 15:21
你能做到计算机收到中断后,再将中断源置高吗?这样就不会丢了吧?
echo
rencrux
驱动牛犊
驱动牛犊
  • 注册日期2002-04-17
  • 最后登录2006-04-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-04-30 13:37
huangco和julan:
我的中断源是宽度为1.9微秒的负脉冲,并以8毫秒为周期连续产生,
你们的意思是:应该一直保持中断负脉冲,直到中断服务程序来清它吗?谢谢。


如果答的好,请给分!
julan
驱动小牛
驱动小牛
  • 注册日期2001-11-23
  • 最后登录2005-04-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-04-30 14:57
yes
echo
游客

返回顶部