Обработка аппаратных прерываний Java

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


person Sigh..It's Urgent    schedule 19.11.2009    source источник
comment
Если вам нужно спросить, ответ - нет.   -  person Hot Licks    schedule 24.06.2012


Ответы (6)


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

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

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

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

person Carl Smotricz    schedule 19.11.2009

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

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

person djna    schedule 19.11.2009
comment
@djna, спасибо за ответ. Я искал такую ​​java-библиотеку, но тщетно. - person Sigh..It's Urgent; 19.11.2009
comment
@Sigh - вам понадобится нативная библиотека, которая соответствует вашей ОС и аппаратной среде. Часть JNI — это не волшебство, в сети есть несколько руководств. - person Andreas Dolk; 19.11.2009

Если вы хотите напрямую реагировать на прерывание от 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.

person Dr. James J. Hunt    schedule 23.06.2012

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

person Andreas Dolk    schedule 19.11.2009

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

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

person Tim Williscroft    schedule 19.11.2009

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

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

person Nick Veys    schedule 23.11.2009