1

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

不过从外观上看,当某个 IO 端口有东西进入时,它应该能够产生中断,对吧?我们已经把它连接到一堆用于机器操作的开关上。

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

我会尽快发布一些我正在使用的代码。我正在尝试向基地址(我拥有的)+ 0xE 写入一些内容,但这无济于事...... AIOWDM WaitForIRQ 方法每次调用它时都会返回一个 0...... 没有任何反应。

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

更新:即使他们提供的示例应用程序也没有检测到任何中断,而且我知道我已经正确安装了跳线,所以我猜它不只是为所有事情触发中断......我猜我必须接线每个也切换到某个 IO 引脚,并且该引脚负责中断...

4

1 回答 1

0

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

另一个原因是,由于 C# 有自己的垃圾收集,您最不希望在垃圾收集中处理中断处理机制,告别用于中断处理的宝贵数据结构,这将增加可观的在这方面的代码开销。

就我个人而言,我从来没有听说过 C# 处理过这种事情,但是一些更精明的读者会说,“等等,用 C# 编写的名为 Singularity 的新奇点操作系统呢?”,在结尾处那天,使用 .NET 运行时来管理这个硬件任务是不行的。

编辑: 在我意识到之后,通过查看参考手册,在它使用的一个 C 代码示例上outp,然后我锁定了您需要进行直接端口输入输出的想法,我认为可能会有所帮助,它是一个 dll这将使您能够做到这一点,输入输出,您需要找到适当的 p/invoke 签名来执行此操作。这里还有另一个 DLL 可以做同样的事情。另外,检查这个 WinRing0代码。

同样,您需要四处挖掘并找到适合 pinvoking 的适当方法签名......

祝你好运......随时发布更多信息,我会尽力帮助...... :)

希望这会有所帮助,最好的问候,汤姆。

于 2010-01-30T19:17:08.283 回答