zuolin
驱动牛犊
驱动牛犊
  • 注册日期2001-08-14
  • 最后登录2008-02-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1543回复:4

关于DriverWorks中断共享的问题求助

楼主#
更多 发布于:2001-12-04 14:44
下面这封信本来是发给站长的,站长让贴出来,看看大家有没有什么
好的办法?

前年(1999年),我们公司用PCI9054做了一块数据采集卡,当时我负责硬件部分设计,另外一个同事负责驱动程序的设计(当时是用DriverWorks的Driverwizard生成的驱动程序框架)。当时,整个系统设计是成功的。后来,我的这个做驱动程序的同事跳槽了。到了今年,出了一些新的主板。我们的驱动程序在这些主板上出了问题。具体的现象是:第一次安装设备驱动程序,运行应用程序没有任何问题。但重新启动以后,Windows2000出现死机(还没有到出现登陆对话框的那一步,有时出现在用户登陆以后)现象。公司决定由我来负责驱动程序的维护和改进工作。对于象我这样第一次接触驱动程序来说,确实是太困难了!没办法,只是为了混口饭吃!!!

经过多次的尝试,发现了下面的事实。必须让我的PCI卡独占某一个中断号,这样什么问题都没有。如果有其他的设备,比如声卡、网卡或USB驱动程序,出现多个设备共享一个中断号的情况,就会出现
上面描述的怪现象。所以,我现在初步断定问题时出在中断共享的地方。

在使用DriverWorks的DriverWizard的step 8 of 10中,IO和Memory资源可以选择是否该资源允许共享还是独占,但IRQ资源的选项却是灰化的(不可用)。这个会影响生成的驱动程序框架吗?

我想,Numega公司的DriverStudio出道有些年头了。软件应该没有问题。但后来我找来一块Win2000不能识别的声卡,根据Vendor ID和Device ID等其他相关信息产生了驱动程序框架,将生成的驱动程序安装到声卡上,也出现了一样的毛病。后来又尝试了AMCC 5933DK1中的PCI卡以及RTL8139的网卡,情况都是一样的。这样一来,我有开始怀疑是软件的问题。

我深信,凡是使用DriverWorks做驱动的开发人员都或多或少地会碰到这个问题。那么他们是怎么解决的呢?是通过Numega的技术支持吗?我想,这是一个很普遍的问题。不知站长对这个问题,有
没有什么高见?能否把这个问题正式地提到论坛上大家一起讨论,共同来提供解决方案。
llshi
驱动老牛
驱动老牛
  • 注册日期2001-05-05
  • 最后登录2016-01-16
  • 粉丝0
  • 关注0
  • 积分5300分
  • 威望26500点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-12-04 16:12
看看你的中断处理程序中处理是否合理。能不能将这段程序写在这上面来。
zuolin
驱动牛犊
驱动牛犊
  • 注册日期2001-08-14
  • 最后登录2008-02-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-12-04 17:26
中断服务程序使用的是Driverworks的DriverWizard生成的代码,我
自己没有做任何的修改。

下面是源代码:

BOOLEAN PciHwusDevice::Isr_Irq(void)
{
// TODO: Verify that the interrupt was caused by our device.
// Replace \"FALSE\" in next line with actual test.
if (FALSE)
{
// Return FALSE to indicate that this device did not cause the interrupt.
return FALSE;
}

// TODO: Service the device.
// Minimal processing may be done here in the ISR, but
// most processing should be deferred to a DPC.
// Generally, you should:
// o  stop the device from generating interrupts
// o  perform any additional time-critical functions
// o  schedule a DPC to perform the bulk of the work.
//

// Request deferred procedure call
// The arguments to Request may be any values that you choose
if (!m_DpcFor_Irq.Request(NULL, NULL))
{
// TODO: Request is already in the queue
// You may want to set flags or perform
// other actions in this case
}

// Return TRUE to indicate that our device caused the interrupt
return TRUE;
}
James.Ji
驱动老牛
驱动老牛
  • 注册日期2001-09-17
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分-9分
  • 威望-8点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-12-05 08:15
if(FALSE)
   return FALSE;

此地方应具体判断,如果不是自己硬件的中断,则返回FALSE;
如果是自己的硬件中断,则处理后返回TRUE;

如:
  if(yourInterruptSourece==1)
  {
    //handle
    return TRUE;
  }
  else
    return FALSE;
车到山前必有路。 虽然有些土,却是我最有感触的一句话。
AndyS
驱动牛犊
驱动牛犊
  • 注册日期2003-03-25
  • 最后登录2005-12-16
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-21 15:03
DriverStudio 3.1生成的代码是这样的,除了TRUE外,都是一样的。
同样的更深一步的问题,如何Verify that the interrupt?
我看楼住的程序的if(false)没有问题,关键是!m_DpcFor_Irq.Request(NULL, NULL)是否自动处理了中断,因为中断不需要我们输入(在pci配置空间自动取得),我们又如何判断了?

BOOLEAN PCINEWDevice::Isr_Irq(void)
{
// TODO: Verify that the interrupt was caused by our device.
// Replace "TRUE" in next line with actual test.
if (TRUE)
{
// Return FALSE to indicate that this device did not cause the interrupt.
return FALSE;
}

// TODO: Service the device.
// Minimal processing may be done here in the ISR, but
// most processing should be deferred to a DPC.
// Generally, you should:
// o  stop the device from generating interrupts
// o  perform any additional time-critical functions
// o  schedule a DPC to perform the bulk of the work.
//

// Request deferred procedure call
// The arguments to Request may be any values that you choose
if (!m_DpcFor_Irq.Request(NULL, NULL))
{
// TODO: Request is already in the queue
// You may want to set flags or perform
// other actions in this case
}

// Return TRUE to indicate that our device caused the interrupt
return TRUE;
}
Keeping up with key skill is the best thing we can do to give ourself an edge in the employment market now―and in the future.R u at least semi-proficient with 10 of the skill on ur field?I would hope I could own or know a friend who can do so with m
游客

返回顶部