Archive 07/10/2020.

Thread / multples / pas autorisé?

bertrlu

Dans la documentation, on peut trouver l’information suivante :“Don’t use too many threads. Try not to use more than one thread per module. Don’t create threads for one-time tasks. Usually, many tasks can be handled by an event loop that runs in a single thread.”

J’ai testé, en déclarant deux thread_create(), la compilation OK, flash OK mais l’exécution s’est plantée avec reboot !!
/**

  • \pre Create the thread to read lsm303dhc accelerometer and magnetometer sensors
    /
    thread_create(stack_1, sizeof(stack_1), THREAD_PRIORITY_MAIN - 1,
    0, lsm303dlhc_3d_th, NULL, “lsm303dlhc”);
    /
    *
  • \pre Create the thread to reald isl29020 luxmeter

*/
thread_create(stack_isl29020, sizeof(stack_isl29020), THREAD_PRIORITY_MAIN - 2,
0, isl29020_th, NULL, “isl29020”);

Pourquoi ?

  1. c’est vraiment interdit
  2. on peut seulement utiliser une seule fois thread_create(), puis ajouter les threads
aabadie2

Bonjour,

  1. Non on peut avoir autant de thread que peut en supporter le microcontrôleur car plus il y a de thread, plus l’application va consommer de RAM. On peut aussi jouer sur la taille de la stack des threads pour mieux contrôler l’espace mémoire nécessaire.

  2. Non, on peut aussi utiliser plusieurs fois thread_create.

Dans les premières versions du TP6, il y avait un thread créé pour chaque capteur (le lps331ap et le lsm303dlhc), les 2 threads étaient créés depuis la fonction main. Et ça fonctionnait très bien, donc c’est tout à fait possible :slight_smile:

Alexandre