Plantage LiquidCrystal + DuinOS

Bonjour à tous,
Je suis en pleine découverte d’Arduino et DuinOS. Je rencontre un problème que je n’arrive pas à résoudre. Mon soft est très simple et fonctionne parfaitement sans DuinOS. Le problème étant que le soft plante totalement dès que j’essaye d’aller récupérer une variable, tout s’arrête. J’ai crée une tache permettant de faire clignoter une led en continue. Et dès que le soft va rechercher la variable, la led ne clignote plus, tout est figé. Le LCD affiche Test (texte écrit directement sur le LCD) mais n’affiche pas la variable qui doit suivre.
Avez-vous déjà rencontré le problème ou avez-vous une idée pour débloquer mon soft??

Merci d’avance.

Voici mon code:

#include <LiquidCrystal.h>

//Assigniation pin LCD
LiquidCrystal lcd(8, 9, 3, 5, 6, 7);

//Définition variables:
int test = 1;

//Constantes Broches
const int aliveLED = 13; //LED de fonctionnement normal

taskLoop(alive) //Tâche vérif fonctionnement soft
{
digitalWrite(aliveLED,HIGH);
delay(300);
digitalWrite(aliveLED,LOW);
delay(700);
}

taskLoop(LCD) //Tâche affichage LCD
{
lcd.home();
lcd.print(“Test”);

lcd.write(test);
}

void setup()
{
//Init LCD
lcd.begin(20, 4);

// Création des tâches
createTaskLoop(LCD, NORMAL_PRIORITY);
createTaskLoop(alive, NORMAL_PRIORITY);
}

void loop()
{

nextTask();

}

Bonjour,

La librairie LiquidCrystal utilise des timings trés précis pour communiquer avec le lcd.
Place la partie lcd en section critique :

taskLoop(LCD)
{
  taskENTER_CRITICAL();
  lcd.home();
  lcd.print("Test");
  lcd.write(test);   
  taskEXIT_CRITICAL();
}

De même place ta variable en volatile pour éviter que le compilateur ne l'optimise :

volatile int test = 1;

Ca fonctionne beaucoup mieux avec les taskENTER_CRITICAL(); et taskEXIT_CRITICAL();

Merci beaucoup!