Bonjour;
après avoir fait le TP 7, j’ai voulu créer une boucle de mesure pour le capteur de lumière. Dois je écrire un autre “static void thread_handler(voidarg)” ? Si je met ma nouvelle boucle de mesure dans le même void que le capteur de champ magnétique, j’ai peur que la deuxième boucle ( celle du capteur de lumière ) ne soit jamais lue…En réalité j’ai essayé d’écrire une partie “static void thread_handler1(voidarg)” ) et de l’appeler dans main ensuite : thread_create(stack, sizeof(stack), THREAD_PRIORITY_MAIN + 1,
0, thread_handler1, NULL, “isl29020”);
NB: j’avais mis THREAD_PRIORITY_MAIN + 2 pour le capteur de champ magnétique et j’avais réglé les temps sur : 500ms pour le champ magnétique, 1s pour la lumière et laissé 2s pour la température et humidité.
Autant vous dire que ça n’a pas plus du tout au système… Un petit coup de main s’il vous plait pour gérer la mesure sur un troisième capteur…
Merci d’avance. J’espère que j’ai été assez claire dans ma demande
Créer une nouvelle boucle de mesure


Bonjour,
Il n’est pas nécessaire de créer un autre thread. La lecture du capteur de lumière peut s’effectuer dans la même boucle while
que pour le lps331ap, dans la fonction main
.

Hello,
attention aux priorités
la tache principale est au niveau 0 donc si tu veux qu’un thread puisse s’exécuter alors que la tache principale est active (dans sa boucle while), il te faut une priorité plus importante
avec + => tache moins importante
avec - => tache plus importante
THREAD_PRIORITY_MAIN - X
avec + X le thread ne s’exécutera jamais

Bonjour,
OK , merci. je vais tester ça .

Bonjour, le main est en priorité 7 si je ne fais pas d’erreur. Dans le programme, il “s’endort” 2s. au départ le thread était d’une priorité plus importante mais comme il s’endormait 500 ms, en fait à l’écran je n’avais que la mesure d’accélération et de champ magnétique. Quand j’ai mis une priorité plus faible au thread qu’au main, j’ai pu voir touts les mesures. Dans mon esprit , les chose sont :
main prioritaire, il s’exécute, puis s’endort; alors on passe au thread moins prioritaire et au bout de 2s on revient au main. Est ce incorrect ?

bjr, les priorités
0 - très prioritaire
7 - priorité du Main
15 - priorité de Idlle
J’avais rien compris /o\ ou bien j’avais rêvé
les threads s’exécutent suivant leur priorité, 0 les plus prioritaire à 15 thread Iddle.
Si un thread ne se suspend pas (xtimer_sleep) seul les threads de plus haute priorité ( numero plus proche de 0) pourront fonctionner
et s’il se suspend les autres thread activés pourront se lancer meme si leur priorité est moindre
si le thread (priorité 13) est le seul non endormi, alors il s’éxécutera,
mais s’il ne se suspend pas, aucun autre thread moins prioritaire (14, 15), ne pourra obtenir la possibilité de s’éxécuter