Java硬件中断处理

时间:2009-11-19 08:07:38

标签: java hardware interrupt interrupt-handling

我想知道在引发硬件中断时是否可以自动调用Java方法。

6 个答案:

答案 0 :(得分:4)

可能有另一种选择。

我正在做类似的事情:在一个应用程序中,我监视4只鼠标的点击。这些点击产生了中断,但我很高兴不直接从Java处理它们。

在Linux下,事实证明有些设备文件(/dev/input/mouse#)在鼠标出现问题时会发出一堆字符。我有一个Thread,每个文件都有一个FileReader阻塞读取。一旦角色到达,相关的线程就会解锁,我可以做任何我喜欢的处理。

所以我的想法是:如果可能的话,找到一种方法来获取设备驱动程序,使文件/设备形式的数据可访问,然后你可以使用Java库中的IO调用从Java访问它,没有奇怪的比特代码和C之间需要。

答案 1 :(得分:3)

原则上是的,但它需要一些C代码和JNI将它与Java联系起来。如果您非常幸运,也许已经有人为您感兴趣的平台建立了一个合适的库。

底线:如果可以在C中完成,则可以将其挂钩到Java。

答案 2 :(得分:2)

如果您想直接响应来自Java的中断,那么VM必须在内核空间(或在驱动程序上下文中具有用户空间驱动程序的某些系统上)运行。 JamaicaVM在某些RTOS上运行,例如Thread-X或VxWorks作为DKM。 RTSJ的下一个版本将支持用Java编写中断服务例程。

即使在用户空间中,RTSJ也可用于运行二级中断处理程序。这需要一个小型设备驱动程序,它可以向VM发送POSIX信号,也可以提供一个字符设备接口,其中VM中的一个线程在读取设备时阻塞。在第一种情况下,AsyncEventHandler可以与POSIX信号相关联。在第二种情况下,每次从设备读取一个字节时,阻止读取设备的踏板都可以触发AsyncEvent。然后将释放附加到AsyncEvebt的任何AsyncEventHandler。

如果您想在Linux下试用,可以下载JamaicaVM个人版:“http://www.aicas.com/jamaica-pe.html”。 JamaicaVM有一个实时垃圾收集器,可以静态编译代码以确保实时性能。这是一种与传统JVM不同的部署模型。

答案 3 :(得分:1)

这是一个处理相同主题的paper。您可能会看一下SWT,我认为它们也在处理硬件中断,尽管它们可能依赖于操作系统API。

答案 4 :(得分:0)

它是嵌入式实时java的标准。访问www.ajile.com或systrmonx.com并购买评估板。

嵌入式java在PC上是不是标准。你可以在PC硬件上获得实时java,但不能在嵌入式位上获得。

答案 5 :(得分:0)

看看SwigJava implementationDirectors,允许您从C / C ++调用Java。

我已经使用这项技术来处理调用C#的中断,并且效果很好。调用Java应该没什么不同。