Обработка аппаратных прерываний Java - PullRequest
4 голосов
/ 19 ноября 2009

Я хотел бы знать, возможно ли автоматически вызывать метод Java при возникновении аппаратного прерывания.

Ответы [ 6 ]

4 голосов
/ 19 ноября 2009

Может быть альтернатива.

Я делаю что-то похожее: в приложении я отслеживаю 4 мыши на клики. Эти щелчки генерируют прерывания, но я счастлив, что не имею дело с ними напрямую из Java.

В Linux оказывается, что есть файлы устройств (/dev/input/mouse#), которые издают кучу символов, когда что-то происходит с мышью. У меня есть Поток для каждого с блокировкой FileReader на чтение. Как только символы прибывают, соответствующий поток разблокируется, и я могу делать любую обработку, какую захочу.

Итак, идея такова: если возможно, найдите способ получить драйвер устройства, чтобы сделать данные доступными для вас в форме файла / устройства, затем вы можете получить к нему доступ из Java, используя только вызовы ввода-вывода из библиотеки Java, без между ними требуется странный бит-код и код C.

3 голосов
/ 19 ноября 2009

В принципе, да, но для привязки этого к Java потребуется некоторый код на C и JNI. Если вам очень повезло, возможно, кто-то уже создал подходящую библиотеку для интересующей вас формы.

Итог: если это можно сделать в C, вы можете подключить это к Java.

2 голосов
/ 24 июня 2012

Если вы хотите напрямую реагировать на прерывание от Java, то виртуальная машина должна работать в пространстве ядра (или в некоторых системах с драйверами пространства пользователя, в контексте драйвера). JamaicaVM работает в этом режиме на некоторых ОСРВ, таких как Thread-X или VxWorks в качестве DKM. Следующий выпуск RTSJ будет поддерживать написание подпрограмм обработки прерываний на Java.

RTSJ может использоваться для запуска обработчиков прерываний второго уровня даже в пользовательском пространстве. Для этого требуется небольшой драйвер устройства, который либо отправляет сигнал POSIX на ВМ, либо предоставляет интерфейс символьного устройства, где один поток в ВМ блокирует чтение устройства. В первом случае AsyncEventHandler может быть связан с сигналом POSIX. Во втором шаге, который блокирует чтение устройства, может запускать AsyncEvent каждый раз, когда байт считывается с устройства. Затем любой AsyncEventHandler, подключенный к AsyncEvebt, будет освобожден.

Если вы хотите попробовать это в Linux, вы можете загрузить персональную версию JamaicaVM: «http://www.aicas.com/jamaica-pe.html". JamaicaVM имеет сборщик мусора в реальном времени, и код может быть скомпилирован статически для обеспечения производительности в реальном времени. обычная JVM.

1 голос
/ 19 ноября 2009

Вот бумага , которая обрабатывает ту же тему. И вы можете взглянуть на SWT , я думаю, они также имеют дело с аппаратными прерываниями, хотя они могут полагаться на API операционных систем.

0 голосов
/ 24 ноября 2009

Взгляните на Swig . Реализация Java имеет Director , что позволит вам вызывать Java из C / C ++.

Я использовал эту технологию для обработки вызовов прерываний в C #, и она отлично работала. Вызов Java не должен сильно отличаться.

0 голосов
/ 20 ноября 2009

Это стандарт для встроенного Java в реальном времени. зайдите на www.ajile.com или systrmonx.com и купите eval board.

Встроенная Java-версия не стандартна для ПК. Вы можете получить в реальном времени Java на ПК, но не встроенный бит.

...