Debogage de sketch

Hello Bubule,

Ta panne n'est certainement pas une mince affaire à corriger si l'Arduino plante tous les 10 jours.

Ton idée de débordement de variable pourrait effectivement être à l'origine, mais ce n'est certainement pas la seule cause possible.

As-tu des fonctions qui en appellent d'autres ? Lorsque tu appelles une fonction, le µC dépose sur la pile l'adresse mémoire de l'instruction suivante pour savoir où revenir lors du retour de la fonction. Donc la pile s'allonge. Lors du retour de la fonction, cette adresse est enlevée de la pile et celle-ci raccourcit. Si une fonction A appelle une fonction B qui elle-même appelle une fonction C et que celle-ci appelle dans certaines circonstances la fonction A, c'est la catastrophe car tu peux alors avoir une boucle sans fin entre plusieurs fonctions.La pile ne cesse de s'allonger et finit par venir recouvrir le code du programme. C'est le plantage assuré.
Lorsqu'un programme devient assez volumineux, il peut être utile de dresser un tableau de toutes les fonctions, en inscrivant pour chaque fonction les éventuelles autres fonctions qu'elle appelle.

Un autre exemple de plantage, c'est l'attente d'une mesure qui, pour une raison ou une autre, ne vient pas. Dans ce cas, le µC n'est pas vraiment planté mais il attend et semble planté car il reste figé au même point.

Il faut vérifier toutes les boucles du programme. En particulier, il faut être certain que la ou les conditions de sortie de la boucle seront toujours remplies à un moment ou a un autre. Si la condition de sortie est la réception d'une mesure (T° par exemple), il est judicieux de prévoir une sortie de boucle après un certain délai écoulé, même si la mesure d'est pas reçue. Dans ce cas, on peut envoyer un code d'erreur sur le moniteur par exemple.

D'une manière générale, il est bon de truffer le programme de messages ou codes envoyés au moniteur, signalant sans cesse où le programme en est. Si le programme plante, il est alors plus aisé de le suivre à la trace.

Je ne pense pas que Studio soit mieux placé que l'IDE Arduino pour résoudre ton problème. Mais il serait peut-être utile d'utiliser un moniteur plus sophistiqué que le moniteur inclus dans l'IDE car si tu plantes tous les 10 jours, il faut enregistrer automatiquement dans un fichier les données reçues par le moniteur.
En-dehors de l'environnement Arduino, le Moniteur porte le nom générique de "Terminal". Je te conseille d'utiliser le "Bray's Terminal" de l'adresse suivante: Terminal
Il est gratuit et permet un enregistrement automatique. Il faut régler le Baud Rate et le Port Com puis cliquer sur "Connect". Tu peux enregistrer en cliquant sur StartLog.