Bonjour ,
j’ai essayé de refaire le TP en écrivant ce qui concernait le capteur lpsxxx dans un deuxième tread. J’ai modifié les priorités de chaque thread à mian -2 et main-1;
J’obtiens bien les mesures à l’affichage mais l’appareil s’emballe. Avez-vous une explication? Faut-il définir un message IPC pour les 2 threads ?
TP avec double thread


Bonjour,
Est-ce que vous avez déclaré les stack des thread dans 2 tableaux static différents ?
Si vous pouviez mettre tout le contenu de votre main.c, il me sera plus simple de vous aider
Alexandre

ci-joint mon fichier main.c :
#include <stdio.h>
#include “thread.h”
#include “xtimer.h”
/* Add lps331ap (baromètre) related include here */
#include “lpsxxx.h”
#include “lpsxxx_params.h”
/* Add lsm303dlhc (accéléromètre) related include here */
#include “lsm303dlhc.h”
#include “lsm303dlhc_params.h”
/* Declare the lps331ap device variable here */
static lpsxxx_t lpsxxx;
/* Declare the lsm303dlhc device variable here */
static lsm303dlhc_t lsm303dlhc;
static char stack[THREAD_STACKSIZE_MAIN];
static void *thread_handler_am(void *arg)
{
(void)arg;
/* Add the lsm303dlhc sensor polling endless loop here */
while (1) {
lsm303dlhc_3d_data_t mag_value;
lsm303dlhc_3d_data_t acc_value;
lsm303dlhc_read_acc(&lsm303dlhc, &acc_value);
printf("Accelerometer x: %i y: %i z: %i\n",
acc_value.x_axis, acc_value.y_axis, acc_value.z_axis);
lsm303dlhc_read_mag(&lsm303dlhc, &mag_value);
printf("Magnetometer x: %i y: %i z: %i\n",
mag_value.x_axis, mag_value.y_axis, mag_value.z_axis);
xtimer_usleep(500 * US_PER_MS);
}
return 0;
}
static void *thread_handler_tp(void *arg)
{
(void)arg;
/* Add the lpsxxx sensor polling endless loop here */
while(1){
uint16_t pres = 0;
int16_t temp = 0;
lpsxxx_read_temp(&lpsxxx,&temp);
lpsxxx_read_pres(&lpsxxx,&pres);
printf("Pression : %u hPa, Température : %u.%u °C\n",pres,(temp/100),(temp%100));
xtimer_sleep(2);
}
return 0;
}
int main(void)
{
/* Initialize the lps331ap sensor here */
lpsxxx_init(&lpsxxx,&lpsxxx_params[0]);
/* Initialize the lsm303dlhc sensor here */
lsm303dlhc_init(&lsm303dlhc,lsm303dlhc_params);
thread_create(stack, sizeof(stack), THREAD_PRIORITY_MAIN - 2,
0, thread_handler_am, NULL, "lsm303dlhc");
thread_create(stack, sizeof(stack), THREAD_PRIORITY_MAIN - 1,
0, thread_handler_tp, NULL, "lpsxxx");
....

Cela venait effectivement du fait que je n’avais pas créé deux stacks différents.
Merci beaucoup.