4

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

4

6 回答 6

4

可能有替代方案。

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

在 Linux 下,当鼠标发生某些事情时,有一些设备文件 ( /dev/input/mouse#) 会喷出一堆字符。我有一个线程,每个线程都有一个 FileReader 在读取时阻塞。一旦字符到达,相关线程就会解除阻塞,我可以做任何我喜欢的处理。

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

于 2009-11-19T08:19:19.583 回答
3

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

底线:如果可以在 C 中完成,您可以将其连接到 Java。

于 2009-11-19T08:10:58.593 回答
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 不同的部署模型。

于 2012-06-23T20:07:03.880 回答
1

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

于 2009-11-19T08:24:02.273 回答
0

看看斯威格Java 实现具有允许您从 C/C++ 调用 Java 的Director

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

于 2009-11-23T23:39:23.173 回答
0

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

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

于 2009-11-19T23:57:22.630 回答