我想知道是否有可能在硬件中断引发时自动调用Java方法。
发布于 2009-11-19 16:19:20
也许还有另一种选择。
我正在做类似的事情:在一个应用程序中,我监视4个鼠标的点击。这些点击会产生中断,但我很高兴不会直接从Java处理它们。
在Linux下,当鼠标发生变化时,设备文件(/dev/input/mouse#)会发出一串字符。我为每个线程设置了一个线程,并在读操作时使用FileReader阻塞。一旦字符到达,相关的线程就会解除阻塞,我就可以做我喜欢的任何处理了。
所以想法是:如果可能的话,找到一种方法让设备驱动程序以文件/设备的形式让你可以访问数据,然后你可以只使用Java库中的IO调用来从Java访问它,而不需要奇怪的代码和C语言。
发布于 2009-11-19 16:10:59
原则上是可以的,但它需要一些C代码和JNI来将其绑定到Java。如果你非常幸运,也许已经有人为你感兴趣的平台构建了一个合适的库。
底线:如果它可以用C语言实现,你就可以把它挂接到Java上。
发布于 2012-06-24 04:07:04
如果您希望直接响应来自Java的中断,那么VM必须在内核空间中运行(或者在一些具有用户空间驱动程序的系统上,在驱动程序上下文中)。JamaicaVM在一些RTOSes上以这种模式运行,比如Thread-X或VxWorks。RTSJ的下一个版本将支持用Java编写中断服务例程。
RTSJ甚至可以用于在用户空间中运行第二级中断处理程序。这需要一个小型设备驱动程序,该驱动程序要么向VM发送POSIX信号,要么提供一个字符设备接口,其中VM中的一个线程在读取设备时阻塞。在第一种情况下,AsyncEventHandler可以与POSIX信号相关联。在第二种情况下,每次从设备读取一个字节时,阻塞设备的踏步都会触发一个AsyncEvent。然后,任何连接到AsyncEvebt的AsyncEventHandler都将被释放。
如果你想在Linux下尝试一下,你可以下载JVM个人版:“JVM。JamaicaVM有一个实时的垃圾回收器,代码可以静态编译以确保实时性能。这是一个与传统JamaicaVM不同的部署模型。
https://stackoverflow.com/questions/1761676
复制相似问题