Я хотел бы знать, можно ли автоматически вызывать метод Java при возникновении аппаратного прерывания.
Обработка аппаратных прерываний Java
Ответы (6)
Может быть альтернатива.
Я делаю что-то подобное: в приложении я слежу за кликами 4 мышей. Эти щелчки генерируют прерывания, но я достаточно счастлив, чтобы не иметь дело с ними напрямую из Java.
Под линуксом оказывается есть файлы устройств (/dev/input/mouse#
), которые изрыгают кучу символов, когда что-то происходит с мышкой. У меня есть поток для каждого с блокировкой FileReader при чтении. Как только появляются символы, соответствующий поток разблокируется, и я могу выполнять любую обработку, которую захочу.
Итак, идея такова: если возможно, найдите способ получить драйвер устройства, чтобы сделать данные доступными для вас в форме файла/устройства, тогда вы сможете получить к ним доступ из Java, используя только вызовы ввода-вывода из библиотеки Java, без каких-либо странных бит- вертящий код и C требуется между ними.
В принципе да, но потребуется некоторый код C и JNI, чтобы связать это с Java. Если вам очень повезло, возможно, кто-то уже собрал подходящую библиотеку для интересующей вас платформы.
Итог: если это можно сделать на C, вы можете подключить это к Java.
Если вы хотите напрямую реагировать на прерывание от Java, тогда виртуальная машина должна работать в пространстве ядра (или в некоторых системах с драйверами пространства пользователя в контексте драйвера). JamaicaVM работает в этом режиме на некоторых RTOS, таких как Thread-X или VxWorks, как DKM. Следующий выпуск RTSJ будет поддерживать написание подпрограмм обработки прерываний на языке Java.
RTSJ можно использовать для запуска обработчиков прерываний второго уровня даже в пространстве пользователя. Для этого требуется небольшой драйвер устройства, который либо отправляет сигнал POSIX на виртуальную машину, либо предоставляет интерфейс символьного устройства, где один поток в виртуальной машине блокируется при чтении устройства. В первом случае AsyncEventHandler может быть связан с сигналом POSIX. Во втором протектор, который блокирует чтение с устройства, может запускать AsyncEvent каждый раз, когда байт считывается с устройства. Затем любой AsyncEventHandler, прикрепленный к AsyncEvebt, будет освобожден.
Если вы хотите попробовать это под Linux, вы можете загрузить личную версию JamaicaVM: "http://www.aicas.com/jamaica-pe.html". JamaicaVM имеет сборщик мусора в реальном времени, и код может быть скомпилирован статически для обеспечения производительности в реальном времени. Это модель развертывания, отличная от обычной JVM.
Это стандарт для встроенной Java в реальном времени. зайдите на сайт www.ajile.com или systrmonx.com и купите оценочную доску.
Встроенная Java не является стандартной для ПК. вы можете получить java в реальном времени на аппаратном обеспечении ПК, но не на встроенном бите.
Взгляните на Swig. реализация Java имеет Директоры, которые позволят вам вызывать Java из C/C++.
Я использовал эту технологию для обработки прерываний, вызываемых в C#, и она отлично работала. Не должно сильно отличаться от вызова Java.