阅读:1048回复:7
哪位用driverstudio开发过PCI卡的驱动?
用ds开发PCI卡(PCI9054)的驱动,需要用到中断。用向导生成的框架程序,在ISR中需要判断是否是我的卡所发出的中断,如果是的话需要禁止中断,然后调用DPC。问题是我在ISR中加入了判断中断和禁止中断的语句后,一运行机器就重启。判断中断的方法是使用成员变量m_MemoryRange0(向导生成)读PCI9054的中断寄存器来判断,禁止中断是写入这个寄存器。我怀疑是不能用成员变量m_MemoryRange0来访问PCI9054的中断寄存器。请各位指点。
|
|
沙发#
发布于:2003-01-19 19:02
建议用KIORange对象.
|
|
|
板凳#
发布于:2003-01-19 20:04
还是不行,不过这次变成蓝屏,显示:DRIVER_IRQL_NOT_LESS_OR_EQUAL和一些地址信息。
|
|
地板#
发布于:2003-01-20 16:30
还是用windriver好一些.
|
|
地下室#
发布于:2003-01-22 20:22
用VToolsD也可以,上手简单 :)
|
|
5楼#
发布于:2003-01-23 14:07
是不是忘了写析构函数?
|
|
6楼#
发布于:2003-02-04 14:03
这是因为你在处理中断的过程中产生了异常。造成异常有多种可能,如:无效的指针,无权限的I/O和内存访问。由于中断程序无法取得应用程序的句柄,因此任何对应用程序的变量操作都是危险的。详细参阅DDK中有关中断的内容。
|
|
7楼#
发布于:2003-02-04 16:31
从提示信息上看,你是在较高级别的IRQL上执行了要在低级别的IRQL上执行的操作。仔细检查ISR或DPC中有没有限制级别的指令。你可以在DS的帮忙文件中查找指令的执行级别。
m_MemoryRange0在ISR中的读写指令都不会有什么问题,我写过9052的中断处理,和你的应用差不多。9054我没用过,不过我想不应该有什么问题。或者您可以再查一下m_MemoryRange0在初始化时,挂在哪一个PCI地址空间上,如果挂错了,那肯定是要出问题的。 |
|
|