2015-11-05 2 views
0

На самом деле у меня есть функция для мониторинга GPIO на моей beaglebone. Я установил эту функцию для отправки пользовательского сигнала (SIGUSR1), когда событие происходит на цифровом входном порту (внешнее прерывание), но эта функция должна находиться в цикле. Я мог бы вставить эту функцию в поток или fork(), но я не думаю, что это изящное решение.Потоковая передача цифрового входного порта (GPIO) в Beaglebone?

Я хотел бы знать, существует ли какой-либо способ/функция/функция, готовая к использованию на языке C, чтобы настроить мониторинг на переднем плане (более высокий приоритет) без ввода цикла, что-то вроде setitimer, которое объявляется только один раз и запускается (ведет мониторинг) без необходимости находиться в цикле.

Я не знаю, возможно ли это с beaglebone/linux, но с PIC эта функция вызывается «Streaming Parallel Port» (SPP).

ответ

0

Я не знаю, как вы контролировать GPIO, но работать с GPIO из пользовательского пространства (см https://www.kernel.org/doc/Documentation/gpio/sysfs.txt) вы можете использовать выбрать и опрос, назовем его с минимальным временем ожидания времени вы может работать без контура, или если вы используете Qt/gtk, вы можете вставить проверку gpio внутри циклов событий этих фреймворков.

Второй вариант заключается в использовании setjmp/longjmp, если вы хотите использовать только C, без C++/импульс,

также, если вы говорите о таймеров вы можете использовать man 2 alarm осуществлять периодические таймеры,

самый простой способ для меня - использовать pthreads и установить поток, который контролирует gpio с наивысшим приоритетом, чтобы не потерять информацию.

Смежные вопросы