#linux #gpio
#linux #gpio
Вопрос:
Я пытаюсь понять, можно ли ждать событий кнопок неблокирующим способом с помощью libgpiod?
Я просмотрел API, в частности циклы событий без ctxless, но все они, похоже, опрашивают блокирующим образом, без возможности использовать обратный вызов select.
Следует отметить, что это одноядерный процессор.
Если вышеупомянутое не может быть выполнено, похоже, мои варианты — написать свой собственный драйвер, создавать потоки и полагаться на планировщик, чтобы замедлить меня, чтобы не блокировать, или более внимательно изучить gpio-ключи, чтобы прервать меня.
Комментарии:
1. 1. Создайте другой поток. 2. Дождитесь кнопки в этом потоке. 3. Продолжайте свою работу в потоке, с которого вы начали. Может быть, вы захотите
gpiod_line_event_wait
?2. Да, я считаю, что это текущий вариант, к которому я склоняюсь. И да, в настоящее время я использую gpiod_line_event_wait, но мне не хватало нажатий кнопок, потому что я не блокировал их.
3. Если верить, если настроено с
GPIOD_LINE_REQUEST_EVENT_*
gpiod_line_event_read
помощью, не должно пропускать события.4. Почему бы не использовать
gpio-keys
драйвер с правильным описанием в первую очередь? В противном случае вы можете использовать мониторинг событий изlibgpiod
библиотеки в отдельном потоке на случай, если вам нужно сделать что-то еще во времяpoll()
простоя. Конечно, вы можете делать все в mainloop, но это не гарантирует, что вы не пропустите некоторые события.