changys
驱动小牛
驱动小牛
  • 注册日期2004-11-15
  • 最后登录2008-08-21
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望15点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1679回复:15

art baker [Window2000 Dirver]书中第八章的中断程序,有人调通过么?

楼主#
更多 发布于:2005-05-13 10:35
我按照书中讲的方法去连接并口线, 自制了一个LoopBack Connector但是在调试第八章的的程序时,就是产生不了中断,有人调通过么?
想请教一下.
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-05-13 10:49
我按照书中讲的方法去连接并口线, 自制了一个LoopBack Connector但是在调试第八章的的程序时,就是产生不了中断,有人调通过么?
想请教一下.

并口一般情况是不用中断的,看你的设备管理器
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
板凳#
发布于:2005-05-13 11:16
可以的 !!
把 pin10 ack 先接地(本身高电平),放开便可中断.
changys
驱动小牛
驱动小牛
  • 注册日期2004-11-15
  • 最后登录2008-08-21
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望15点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-05-13 11:37
可以的 !!
把 pin10 ack 先接地(本身高电平),放开便可中断.
 


楼上的兄弟, 我对你所说的 \"放开便可中断\"不太理解,
是先接地,在调试程序的过程中 在把这根线剪断么?
那也太土了点

如果我想把这个程序调试通过, 具体该怎么做呢?
我是这么做的:
1.先按照书上把并口线接好
2.安装第8章的驱动
3.执行user mode的程序
4.等待中断的产生,
可是中断并不产生, 程序就这样挂了
真的被中断了:)
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
地下室#
发布于:2005-05-13 11:51
 
在调试程序的过程中 在把这根线剪断么?


它是要一正何脉冲,故先接地後放开,我是串一开关在线上的,把根线剪断也可 !! 但这真的太土了,下一次又要接上去.

另外你的user mode的程序可能没产生中断,也要看你的设备管理器有没有用这中断,当初我没注意这点 !!!
changys
驱动小牛
驱动小牛
  • 注册日期2004-11-15
  • 最后登录2008-08-21
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望15点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-05-13 13:55
[quote] 在调试程序的过程中 在把这根线剪断么?


它是要一正何脉冲,故先接地後放开,我是串一开关在线上的,把根线剪断也可 !! 但这真的太土了,下一次又要接上去.

另外你的user mode的程序可能没产生中断,也要看你的设备管理器有没有用这中断,当初我没注意这点 !!! [/quote]

我按照你的方法还是没有产生中断,在设备管理器中我已经看到了并口有个7号中断,

你的方法和书上说的不太一样,书上是把pin10 和 pin16连接在一起,
你能把你的调试步骤描述的详细些么?
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
6楼#
发布于:2005-05-13 14:22
看看IoConnectInterrupt()反回是甚麽值,可能中断根本没接上.
我不是用Art Baker的code,我是用
http://www.beyondlogic.org/interrupts/winnt_isr_dpc.htm

另外把
HalGetInterruptVector(Isa, 0, pDevExt->Irq, 0,
                             &kIrql, &kAffinity);
里的Isa改成PCIBus试试看.

如果用PCI的结,IoConnectInterrupt()要改
status = IoConnectInterrupt(
   &DeviceExtension->InterruptObject, // InterruptObject
   InterruptIsr, // ServiceRoutine
   DeviceObject, // ServiceContext
   NULL, // SpinLock
   MappedVector, // Vector
   Irql, // Irql
   Irql, // SynchronizeIrql
   LevelSensitive, // PCI use LevelSensitive
   TRUE, // PCI alway true
   DeviceExtension->Affinity, // ProcessorEnableMask
   FALSE // FloatingSave alway false for x86
   );
我没用program试,用那根线而已 !

[编辑 -  5/13/05 by  KMK]
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
7楼#
发布于:2005-05-13 14:42
看图 :
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-05-13 15:47
看看IoConnectInterrupt()反回是甚麽值,可能中断根本没接上.
我不是用Art Baker的code,我是用
http://www.beyondlogic.org/interrupts/winnt_isr_dpc.htm

另外把
HalGetInterruptVector(Isa, 0, pDevExt->Irq, 0,
                             &kIrql, &kAffinity);
里的Isa改成PCIBus试试看.

如果用PCI的结,IoConnectInterrupt()要改
status = IoConnectInterrupt(
   &DeviceExtension->InterruptObject, // InterruptObject
   InterruptIsr, // ServiceRoutine
   DeviceObject, // ServiceContext
   NULL, // SpinLock
   MappedVector, // Vector
   Irql, // Irql
   Irql, // SynchronizeIrql
   LevelSensitive, // PCI use LevelSensitive
   TRUE, // PCI alway true
   DeviceExtension->Affinity, // ProcessorEnableMask
   FALSE // FloatingSave alway false for x86
   );
我没用program试,用那根线而已 !

[编辑 -  5/13/05 by  KMK]

也可以用SoftIce,用IDT指令看看
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
changys
驱动小牛
驱动小牛
  • 注册日期2004-11-15
  • 最后登录2008-08-21
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望15点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-05-13 17:00
To KMK:
  谢谢KMK,我用你的方法确实产生了中断,我想问一下你在哪里找到中断的依据的?[先将pin10 接地然后断开]

To bmyyyud:
 \"也可以用SoftIce,用IDT指令看看\"
 能描述一下使用这个IDT指令的过程么?
changys
驱动小牛
驱动小牛
  • 注册日期2004-11-15
  • 最后登录2008-08-21
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望15点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-05-13 18:30
To KMK:
为什么会出现这种情况:
有时候调用三次Isr函数 再调用一次Dpc函数,
有时候调用两次Isr函数 再调用一次Dpc函数,
有时候调用一次Isr函数 再调用一次Dpc函数?

就这个程序而言,我觉得Isr 和 Dpc的关系应该是1:1的才对啊?
这说明了什么问题呢?
我跟踪了一下IoRequestDpc这个宏只有在第一次的时候返回一个TRUE,其余时候都是FALSE, 直到DPC处理完毕,下一个中断来临!


BOOLEAN InterruptIsr(IN PKINTERRUPT Interrupt, IN OUT PVOID Context)
{
PDEVICE_OBJECT DeviceObject = Context;

KdPrint( (\"Interrupt.sys: Interrupt Service Routine\\n\") );

/* We should check if the interrupt comes from us and return */

IoRequestDpc(DeviceObject,
DeviceObject->CurrentIrp,
NULL);

return TRUE;
}


qfzcx
驱动牛犊
驱动牛犊
  • 注册日期2004-10-13
  • 最后登录2010-01-11
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望87点
  • 贡献值1点
  • 好评度1点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-05-13 21:13
可能是不稳定,输入不可靠的原因,并个小电容试试
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-05-14 09:40
看图 :

呵呵,KMK服务到家了 :D :D
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
changys
驱动小牛
驱动小牛
  • 注册日期2004-11-15
  • 最后登录2008-08-21
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望15点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-05-16 09:49
To 楼上的大侠们:

像这样一个中断来了,ISR会被调用好多次的道理是什么呢?

怎么才能从软件和硬件上避免呢?

硬件是不是如qfzcx所说,
\"并个小电容\"就可以了, 不太理解其原理,谁能解说一下?

KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
14楼#
发布于:2005-05-16 11:19
 
像这样一个中断来了,ISR会被调用好多次的道理是什么呢?
 


一次中断应是一次ISR !!
试试在ISR里把中断disable.看看结果如何 ??






现在要混几分真不容易  :D :D
qfzcx
驱动牛犊
驱动牛犊
  • 注册日期2004-10-13
  • 最后登录2010-01-11
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望87点
  • 贡献值1点
  • 好评度1点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-05-16 14:34
加个电容(要小)是去除闭合瞬间的抖动,在单片机键盘中就是这样去干扰的,当然也可软件去干扰。
在你的按键闭合时不是立即从一个电平状态到另一个状态,而是反复几次后才到另一个状态。具体可查单片机开发方面的书。
游客

返回顶部