zab
zab
驱动小牛
驱动小牛
  • 注册日期2001-07-04
  • 最后登录2008-01-10
  • 粉丝0
  • 关注0
  • 积分126分
  • 威望14点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
阅读:1048回复:7

哪位用driverstudio开发过PCI卡的驱动?

楼主#
更多 发布于:2003-01-19 16:23
用ds开发PCI卡(PCI9054)的驱动,需要用到中断。用向导生成的框架程序,在ISR中需要判断是否是我的卡所发出的中断,如果是的话需要禁止中断,然后调用DPC。问题是我在ISR中加入了判断中断和禁止中断的语句后,一运行机器就重启。判断中断的方法是使用成员变量m_MemoryRange0(向导生成)读PCI9054的中断寄存器来判断,禁止中断是写入这个寄存器。我怀疑是不能用成员变量m_MemoryRange0来访问PCI9054的中断寄存器。请各位指点。
Dragon2008
驱动中牛
驱动中牛
  • 注册日期2002-04-01
  • 最后登录2006-03-13
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-01-19 19:02
建议用KIORange对象.
我姓龙,我属龙,我叫龙。。。
zab
zab
驱动小牛
驱动小牛
  • 注册日期2001-07-04
  • 最后登录2008-01-10
  • 粉丝0
  • 关注0
  • 积分126分
  • 威望14点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-19 20:04
还是不行,不过这次变成蓝屏,显示:DRIVER_IRQL_NOT_LESS_OR_EQUAL和一些地址信息。
scsi
驱动中牛
驱动中牛
  • 注册日期2002-03-22
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望116点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-01-20 16:30
还是用windriver好一些.
mardux
驱动小牛
驱动小牛
  • 注册日期2002-11-21
  • 最后登录2004-09-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-01-22 20:22
用VToolsD也可以,上手简单 :)
vv6
vv6
驱动牛犊
驱动牛犊
  • 注册日期2002-03-01
  • 最后登录2011-06-17
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-01-23 14:07
是不是忘了写析构函数?
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-02-04 14:03
这是因为你在处理中断的过程中产生了异常。造成异常有多种可能,如:无效的指针,无权限的I/O和内存访问。由于中断程序无法取得应用程序的句柄,因此任何对应用程序的变量操作都是危险的。详细参阅DDK中有关中断的内容。
lvhaow
驱动小牛
驱动小牛
  • 注册日期2001-10-31
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分44分
  • 威望35点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2003-02-04 16:31
从提示信息上看,你是在较高级别的IRQL上执行了要在低级别的IRQL上执行的操作。仔细检查ISR或DPC中有没有限制级别的指令。你可以在DS的帮忙文件中查找指令的执行级别。

m_MemoryRange0在ISR中的读写指令都不会有什么问题,我写过9052的中断处理,和你的应用差不多。9054我没用过,不过我想不应该有什么问题。或者您可以再查一下m_MemoryRange0在初始化时,挂在哪一个PCI地址空间上,如果挂错了,那肯定是要出问题的。
lvhaow
游客

返回顶部