J'ai un souci avec mon programme qui freeze après un long moment de fonctionnement.
Avant de présenter du code, j'explique le programme en question:
J'ai un Arduino avec un DS18B20 + PCF8383 + SDcard 2Go + LED en sortie + SWITCH en entrée.
Le programme principale
Désactive l'interruption int0
Lit l'horloge RTC en i2c
Lit la t° sur le bus 1wire
"Affiche" date/heure + t° sur le port série.
Ecrit les 2 chaines sur une carte SD
Réactive l'INT0
Se met en veille.
L'interruption est provoquée par la RTC toute les mn.
Cela fonctionne très bien pendant 2 jours dernièrement puis parfois cela freeze lors du Serial.print de la t°.
Il affiche les premiers caractères puis blocage.
Auriez vous une piste pour comprendre le problème.
Est ce que la fonction Serial.print rend la main après l'envoie des caractères au port série ou rend la main directement et l'envoie se fait par interruption ?
L'interruption est provoquée par la RTC toute les mn.
L'interruption ne tombant que toutes les minutes,
il n'y a pas de risque d'avoir une nouvelle interruptions pendant la gestion de l'interruption courante.
le traitement que tu détailles ne prend pas une minute pour s'exécuter
donc pourquoi les masquer? C'est pas une bonne idée lorsqu'on fait des liaisons série.
Maintenant le problème se produisant sur une échelle de temps assez grande, je chercherai s'il n'y a pas une fuite mémoire. Ou alors il y a un processus que tu n'as pas décrit et qui tombe de manière asynchrone.
// Lecture temperature
getTemp(temperature) ;
Serial.print(temperature); // Blocage à ce niveau
Serial.print("° ");
// Ecriture dans fichier log
cli() ; // Je désactive les int. lors de l'écriture sur la carte SD (blocage ici ?)
sprintf(logline, "%s %s", time, temperature) ;
writedata2log(logline) ;
sei() ;
Je teste en moment sans cli()/sei().
Peut-être faut-il un flush avant de passer par l'écriture en SD ?