Estoy trabajando con interrupciones gpio. Tengo un archivo en "/ sys/class/gpio/gpio38/value". Deseo una notificación siempre que haya un cambio en el atributo valor. Entonces, ¿cómo puedo lograr esto en el espacio de usuario? Como ya he recopilado información, puedo usar select(), poll() o epoll(). Entonces, ¿cuál es el correcto para esta aplicación? O por favor sugiérame si puedo usar/proc/irq o algo. Gracias :)select(), poll() o epoll()? para el atributo sysfs
Respuesta
he encontrado algo here que pueda ser de ayuda:
señales GPIO tienen como caminos/sys/class/GPIO/gpio42/(por GPIO # 42) y tienen la siguiente lectura/escribe atributos:
"valor" ... se lee como 0 (bajo) o 1 (alto). Si el GPIO está configurado como salida, este valor puede escribirse; cualquier valor distinto de cero se trata como alto.
Si el pasador se puede configurar como generadora de interrupción de interrupción y si se ha configurado para generar interrupciones (ver la descripción de "borde"), puede sondear (2) en ese archivo y poll (2) volverá cada vez que se active la interrupción. Si usa encuesta (2), configure los eventos POLLPRI y POLLERR. Si usa use select (2), configure el descriptor de archivo en exceptfds. Después de la encuesta (2) devuelve, ya sea lseek (2) al comienzo del archivo sysfs y lee el nuevo valor o cierra el archivo y lo vuelve a abrir para leer el valor.
Aunque dice que es para "gpio42", supongo que esto puede aplicarse a su caso. Si no es así, haga un comentario en mi respuesta.
Puede usar cualquiera de ellos. El punto aquí es que se abre el archivo sysfs para el valor de la línea de GPIO (por ejemplo /sys/class/gpio/gpio42/value
y luego bloquear en él.
Los cambios en el estado de la línea se señalizan como una condición de excepción en lugar de una escritura (como podría ser intuitivo).
En el caso de select:
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
}
tenga en cuenta que no todos los GPIO se interrumpen con capacidad Si el GPIO?. está trabajando con no admite interrupciones (y esto dependerá de la CPU/SoC exacta que esté usando), necesitará leerlo periódicamente y – duskwuff
No hay dudas de que esto es cierto, especialmente cuando la línea GPIO se implementa con un periférico I2C o códec de audio. Sin embargo, en ese caso, nunca estarías llamando 'select()' 'pselect()', 'poll()' o 'epoll()' en ellos. ['poll()' y sus hermanos, de hecho no sondean nada] – marko
Hola @Marko Muchísimas gracias por la respuesta. ¿Puedes darme un código de muestra para seleccionar que has mencionado anteriormente? de hecho, lo que estoy haciendo es cuando hago eco de 1> nombre_de_archivo, entonces la notificación debería imprimirse. Será de gran ayuda. –
- 1. select vs poll vs epoll
- 2. Advertencias de select/poll vs. reactores epoll en Twisted
- 3. Equivalente de select o poll en bash
- 4. epoll VS select
- 5. Win32 select/poll/eof/NADA?
- 6. Usando select/poll/kqueue/kevent para ver un directorio de archivos nuevos
- 7. efecto Simulación de select() y poll() en el núcleo de la programación del zócalo
- 8. ¿Falta algo o simplemente no entiendo epoll?
- 9. epoll rendimiento
- 10. Usando el subproceso wait() y poll()
- 11. Notificación al cliente, ¿debo usar un AJAX Push o Poll?
- 12. ¿Qué es Big-O para SQL select?
- 13. Epoll en archivos regulares
- 14. ¿Hay un plugin jQuery poll?
- 15. Epoll y apagado unidireccional remoto
- 16. ¿Hay equivalente epoll en Java?
- 17. Boost Asio en Linux sin usar Epoll
- 18. Modelo de subprocesamiento y escalado para servidor TCP con epoll
- 19. JPA - MAX de contar o SELECT FROM SELECT
- 20. Mongodb ¿Cambiar el atributo ObjectID o _id para un documento?
- 21. ¿Hay un módulo de python para analizar el sysfs de Linux?
- 22. ¿Cuál es el propósito de la opción desencadenada por borde de epoll?
- 23. ¿Buildbot poll es un repositorio git para nuevas confirmaciones?
- 24. ¿Qué es el atributo antiJARLocking?
- 25. A readOnly Equivalent para HTML Select Elements
- 26. ¿Por qué LinkedBlockingQueue # poll() puede colgar?
- 27. Un problema de epoll multiproceso en Linux
- 28. Acceso de controlador de Linux a través de sysfs
- 29. Conexión asíncrona y desconexión con epoll (Linux)
- 30. SSMS no mostrar o FILESTREAM scripting atributo
gracias @ tony-del-león, significa que tengo para sondear archivo de borde o archivo de valores –