如何使用此硬件IO卡启用和检测中断?

时间:2010-01-30 18:54:16

标签: c# .net-3.5 hardware interrupt-handling

我有以下卡,无法进行中断工作。我可能不理解他们应该如何正常工作......我不经常做这种类型的编程。

从它的外观来看,它应该能够在其中一个IO端口进入时产生中断,对吧?我们已经将它连接到一堆用于机器操作的开关。

http://accesio.com/go.cgi?p=../pci/pci_dio_24d.html

我会尽快发布一些我正在使用的代码。我正在尝试写一些东西到基地址(我有)+ 0xE但这没有帮助...... AIOWDM WaitForIRQ方法只是在每次调用它时返回0 ...没有任何反应。

任何帮助都将不胜感激......我知道这是一个普遍的问题。

更新:即使是他们提供的示例应用程序也没有检测到任何中断,我知道我已经正确安装了跳线,所以我猜它不仅仅会触发所有内容......我猜我必须将每个开关连接到某个IO引脚,并且一个引脚负责中断......

1 个答案:

答案 0 :(得分:0)

简而言之,C#不适合此类任务,因为这是低级非托管代码。理论上你可以做到这一点,但是当你不得不经常去非管理世界来处理中断时会更痛苦。我建议从C / C ++本机代码中查看这些代码,这些代码可以更好地处理这种低级别的东西。

另一个原因是,由于C#有自己的垃圾收集,你最不希望的是中断处理机制在垃圾收集中处理好再见用于中断处理的宝贵数据结构,这个在这方面会给代码增加相当大的开销。

就个人而言,我从来没有听说过C#处理过这种事情,但是一些比较精明的读者会说,“坚持下去,那个用C#编写的名为Singularity的新奇操作系统怎么样?”,当天结束时,使用.NET运行时来管理这个硬件任务是一个禁忌。

修改 在我意识到,通过查看参考手册,在其中一个C代码示例上使用outp,然后我认为您需要进行直接端口输入输出,我想this可能有帮助,它是一个dll,使你能够完全这样做,输入输出,你需要找到适当的p / invoke签名来做到这一点。还有另一个DLL可以做同样的事情here。另外,请检查this WinRing0代码。

再一次,你需要挖掘并找到适合pinvoking的适当方法签名...

祝你好运..感觉随意发布,我会尽力帮忙... :)

希望这有帮助, 最好的祝福, 汤姆。