guillaume9344 a écrit :spourre a écrit : Je suis un vieux fossile, formé au C de Richie et Kernighan et au fork.
C aussi mon language de prédilection , pour la getion des gpio jutilise aussi la lib bcm2835.c:
http://www.airspayce.com/mikem/bcm2835/
avec comme plus pour moi , de pouvoir inclure directement les fichiers .c .h que j'ai besoin dans le projet de compil
et non de passer par un fichier deja compilé .o , je peux ainsi satisfaire à ma curiositée et inspecter les sources et tenter de comprendre un peu leurs fonctionnements.
@+
Je ne voudrais pas polluer le fil de notre modo et néanmoins ami, vague-nerd, mais comme il s'est frotté aux interruptions, j'espère qu'il nous pardonnera cette digression.
Le problème de l'utilisation des GPIO (I2C, SPI, autres pins) en lecture est que, majoritairement, on fait appel à une boucle infinie avec des sleep. AMHA, ceci constitue une horreur absolue et, pendant ce temps, le programme ne fait rien d'autre que d'attendre.
Sauf erreur de ma part, il n'y a pas de gestion des interruptions avec gestion priorité, interruption non masquable, ni dans le kernel, ni au niveau hard.
Il faut donc implémenter un ISR dans l'espace utilisateur (c'est mieux que rien).
La lib bcm2835, je cite le site, NE SAIT PAS LE FAIRE:
It provides functions for reading digital inputs and setting digital outputs, using SPI and I2C, and for accessing the system timers. Pin event detection is supported by polling (interrupts are not supported).
La libwiringPi semble en être capable et des exemples sont disponibles sur son site (exemple isr.c). Le principe est de lancer un thread qui lit le GPIO (thread assez légère) et d'armer une interruption dans le programme principal. La communication se fait par une variable mais il doit être possible d'utiliser un segment de mémoire partagée et/ou un pipe:
http://wiringpi.com/reference/priority- ... d-threads/
Comme je l'ai indiqué, il faut encore, pour une bonne compréhension, que je creuse la différence entre le fork (à l'ancienne) et le thread POSIX
Cordialement
Sylvain