我想知道在引发硬件中断时是否可以自动调用Java方法。
答案 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)
答案 4 :(得分:0)
它是嵌入式实时java的标准。访问www.ajile.com或systrmonx.com并购买评估板。
嵌入式java在PC上是不是标准。你可以在PC硬件上获得实时java,但不能在嵌入式位上获得。
答案 5 :(得分:0)
看看Swig。 Java implementation有Directors,允许您从C / C ++调用Java。
我已经使用这项技术来处理调用C#的中断,并且效果很好。调用Java应该没什么不同。