Pracuję z przerwaniami gpio. Mam plik w "/ sys/class/gpio/gpio38/value". Chcę otrzymywać powiadomienia o każdej zmianie wartości atrybutu o wartości. Jak mogę to osiągnąć w przestrzeni użytkownika? Jak już zebrałem informacje, mogę użyć select(), poll() lub epoll(). Co jest poprawne dla tej aplikacji? Lub proszę zasugeruj mi, czy mogę użyć/proc/irq lub coś takiego. Dzięki :)select(), poll() lub epoll()? dla atrybutu sysfs
Odpowiedz
Znalazłem coś here, które mogą być pomocne:
sygnały GPIO mają ścieżki jak/sys/class/GPIO/gpio42/(dla GPIO # 42) i mają następujące lektury/write attributes:
"wartość" ... odczytuje jako 0 (niska) lub 1 (wysoka). Jeśli GPIO jest skonfigurowany jako wyjście, ta wartość może być zapisana; każda niezerowa wartość jest traktowana jako wysoka.
Jeśli pin może być skonfigurowany jako przerwaniami generowania przerwań i jeśli został skonfigurowany do generowania przerwań (patrz opis „krawędzi” ), można sondować (2) na tym pliku i ankiecie (2) powróci po każdym wywołaniu przerwania. Jeśli użyjesz funkcji poll (2), ustaw zdarzenia POLLPRI i POLLERR. Jeśli użyjesz select (2), ustaw deskryptor pliku w exceptfds. Po ankieta (2) zwraca, lseek (2) na początku pliku sysfs i odczytać nową wartość lub zamknąć plik i ponownie otworzyć go , aby odczytać wartość.
Chociaż mówi się, że jest to "gpio42", zgaduję, że może to dotyczyć twojego przypadku. Jeśli nie, zrób komentarz w mojej odpowiedzi.
Możesz użyć dowolnego z nich. Chodzi o to, że po otwarciu pliku sysfs dla wartości linii GPIO (np /sys/class/gpio/gpio42/value
a następnie zablokować go.
Zmiany stanu linii sygnalizowane są jako warunek raczej wyjątek niż zapisu (jak mogłoby być intuicyjne).
W przypadku Wybierz:
fd_set exceptfds;
int res;
FD_ZERO(&exceptfds);
FD_SET(gpioFileDesc, &exceptfds);
res = select(gpioFileDesc+1,
NULL, // readfds - not needed
NULL, // writefds - not needed
&exceptfds,
NULL); // timeout (never)
if (res > 0 && FD_ISSET(gpioFileDesc, &exceptfds))
{
// GPIO line changed
}
Należy pamiętać, że nie wszystkie GPIOs są przerwaniami zdolny Jeżeli GPIO?. z którymi pracujesz nie obsługuje przerwań (zależy to od używanego procesora/SoC), będziesz musiał przeczytać go okresowo y. – duskwuff
Nie ma wątpliwości, że jest to prawdą - szczególnie, gdy linia GPIO jest zaimplementowana z peryferyjnym lub audio kodekiem I2C. Jednak w takim przypadku nigdy nie wywołasz na nich opcji 'select()' 'pselect()', 'poll()' lub 'epoll()'. ['poll()' i jego bracia, w rzeczywistości nie sondujcie] – marko
Witam @Marko Dziękuję bardzo za odpowiedź. Czy możesz podać mi przykładowy kod do wyboru, o którym wspomniałeś powyżej? tak naprawdę robię, kiedy robię echo 1> nazwa_pliku, wtedy powinno się wydrukować powiadomienie. Będzie to bardzo pomocne. –
- 1. select vs poll vs epoll
- 2. poll vs. epoll wglądu
- 3. Używanie select()/poll() w sterowniku urządzenia
- 4. Sterownik dla systemu Linux: ioctl lub sysfs?
- 5. Symulacja efektu select() i poll() w programowaniu gniazda jądra
- 6. Używanie select/poll/kqueue/kevent do oglądania katalogu dla nowych plików
- 7. Wielowątkowość serwera UDP z epoll?
- 8. JQuery ustawienie wybranego atrybutu na liście select
- 9. Epoll na zwykłych plikach
- 10. Jak napisać aplikację dla systemu Android, aby sysfs odczytać/zapisać.?
- 11. Używanie podprocesu wait() i poll()
- 12. Identyfikacja modułu jądra, który utworzył wpis sysfs
- 13. after_commit dla atrybutu
- 14. System powiadomień z p: poll/push
- 15. Metoda poll() Kafki Consumer zostaje zablokowana
- 16. Czy epoll jest bezpieczny w użyciu?
- 17. Czy OS X nie obsługuje funkcji epoll?
- 18. Co to jest równoważna funkcja C# selekcji/epoll/kqueue?
- 19. poll (2) nie opróżnia kolejki zdarzeń
- 20. SELECT SUM() FROM (SELECT (SELECT())
- 21. WebDriverWait dla elementu atrybutu zmienić
- 22. Korzystanie parametr dla atrybutu StringLength
- 23. Wykrywanie zmiany atrybutu wartości atrybutu, który utworzyłem
- 24. Użyj atrybutu [Serializable] lub podklasy z MarshalByRefObject?
- 25. java.lang.IllegalArgumentException: znak kontrolny wartości ciasteczka lub atrybutu
- 26. Odpowiedni tylko dla elementów HTML Select
- 27. Czy HTML5 wymaga atrybutu działania dla formularzy?
- 28. Slick select select by id
- 29. SELECT trwa 100ms; UTWÓRZ tabelę jako wybierz - lub - INSERT w select trwa 15 minut
- 30. Składnia dla zastosowania atrybutu do anonimowej metody?
dzięki @ tony-the-lwa, oznacza to mam do sondowania dla pliku krawędzi lub pliku wartości –