- yata,
Bonjour,
Il s'agit d'un petit programme en C que je fais tourner sur ma Raspberry Pi. Rien de bien utile, je m'amuse simplement à faire clignoter des LEDs Dans ce programme, j'ai dû utiliser une variable globale. Je sais ce n'est pas dérangeant, mais du moment que cette pratique n'est pas forcément recommandable, je me demandais s'il n'y avait pas une autre façon de procéder. Après tout, je fais également cela pour apprendre (tout en ayant un projet amusant )
Le programme permet de faire clignoter des LEDs à une certaine fréquence. Fréquence qui est réglée par un client qui se connecte, via le système de socket, au "serveur" : la Raspberry Pi.
Voici le fonctionnement général :
1 2 3 4 5 6 7 8 9 10 11 | void server() { // Crée le socket etc // [...] // Crée un thread qui va exécuter la fonction (appelons la led() par exemple) faisant clignoter les LEDs // [...] while( (csock = accept(sock, (sockaddr *) &csin, &crecsize)) ) { // [...] recv(csock, buffer, 32, 0); ledDataHandler(buffer); } } |
Il est important de créer un thread pour faire clignoter les LEDs, car la fonction ne peut se permettre d'attendre de recevoir des données (tels que la fréquence de clignotement). Ensuite, je me contente d'envoyer les données reçues à la fonction qui va s'occuper de traiter ces données.
1 2 3 4 5 6 7 8 9 10 | // Ma variable globale (structure contenant la fréquence de chaque LED). LEDS leds = {0} void * led(void *pVoid) { // S'occupe de faire clignoter les LEDs } void ledDataHandler(char *data) { // Modifie la variable leds en fonction du paramètre data. } |
Ici, j'ai la fonction led()
qui va lire les fréquences contenues dans la variable leds. Et ledDataHandler()
qui va modifier ces fréquences en fonction des donnés reçues par le serveur.
J'ai pensé à créer la variable leds
dans la fonction du serveur puis passer sa référence aux deux fonctions mais… Je ne trouve pas cela très pratique. En plus, je ne trouve pas cela logique de créer ma variable leds
dans la fonction qui reçoit les informations du serveur.
Je pourrai également traiter directement les données dans la fonction leds
mais étant donné qu'il y a une boucle, ce traitement se ferait à chaque itération… Même quand les données ne changent pas.
Est ce que vous voyez une autre façon de procéder ?
Merci