Bonjour à tous,
je viens de terminer une partie d'une bibliothèque et je souhaiterai la tester au moyen d'un petit programme qui est le suivant :
Le programme est assez simple conceptuellement.Code:#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <semaphore.h> #include "lampe.h" #include "gpio.h" /*******************************************/ /* PINS GPIO */ /*******************************************/ #define PIN_LAMPE 2 /*******************************************/ #define PSHARED_BETWEEN_THREADS 0 #define TEMPS_ACTUAL 30.0 #define VALEUR_INITIALISATION_SEMAPHORE 1 #define ADRESSE_FICHIER_LAMPE "/home/nicolas/Documents/lampe.schedule" int main() { struct lampe_args * parametre; parametre=malloc(sizeof(*parametre)); parametre->addr=ADRESSE_FICHIER_LAMPE; parametre->TEMPS_ACTUALISATION=TEMPS_ACTUAL; parametre->pin=PIN_LAMPE; parametre->donnees=NULL; parametre->GPIO_ACCESS=map_memory(); pthread_t * thread_lampe; //Initialisation des semaphores sem_init(parametre->sem_GPIO, PSHARED_BETWEEN_THREADS, VALEUR_INITIALISATION_SEMAPHORE); sem_init(parametre->sem_lampe_file, PSHARED_BETWEEN_THREADS, VALEUR_INITIALISATION_SEMAPHORE); //Creation des threads pthread_create(thread_lampe,NULL,(void * (*)(void *))lampe_main,parametre); //Attente des threads pthread_join(*thread_lampe,NULL); //Destruction des semaphores sem_destroy(parametre->sem_lampe_file); sem_destroy(parametre->sem_GPIO); unmap_memory(parametre->GPIO_ACCESS); free(parametre); return 0; }
La structure paramètre possède toutes les données nécessaires à l’exécution du thread thread_lampe.
Il y a notamment l'adresse d'un fichier qui sera lu par un thread thread_actualiser_donnees pour actualiser une information de parametre.
Un autre thread s'execute (le thread_gerer_GPIO) qui va changer la valeur de certains registres en fonction de l'information contenue dans parametre.
L'utilisation de ressources partagées nécessite l'exécution de deux threads selon moi (peut-être ai-je tort sur ce coup).
Je n'obtiens aucune erreur à la compilation mais le programme s'arrete automatiquement.
Je ne comprends pas pourquoi et je pense qu'il s'agit d'une mauvaise manipulation des threads.
Quelqu'un pour me remettre dans le droit chemin ?
Merci par avance à tous les lecteurs.
-----