J'ai un soucis de "stabilité" ou de mémoire sur mon arduino Nano en fonctionnement continue
Contexte :
C'est un programme sur un Arduino Nano qui affiche sur un écran oled (SSD1306) des tensions provenant d'un ADS1015
à la compilation : 58% de stockage et 70% de mémoire dynamique
Problème :
Le programme fonctionne ! MAIS dès que je dépasse les 5-6 heures de fonctionnement EN CONTINUE eh bien l'arduino se "bloque" : l'affichage reste "figé", et les pin d'entrées ne sont plus actives, idem pour les interruptions. IDEM quand je suis en mode veille !
Par contre les premières heures tout fonctionne très bien.
Je pencherais plutôt pour un problème de "mémoire" saturée ... comme si il y avait des "fuites mémoires" ...
Allouez vous dynamiquement de la mémoire vous même ou une de vos librairies ? sans code difficile de vous aider
Non, je n'utilise pas de string mais des display.print(F("mon texte"))
et non je n'alloue pas de mémoire moi même (je ne sais pas comment faire :o )
Voici seulement les instructions que j'ai mis en copié/coller sans les comprendre réellement :
ADCSRA = 0; // Disable ADC
// Disable the analog comparator by setting the ACD bit
// (bit 7) of the ACSR register to one.
ACSR = B10000000;
// Disable digital input buffers on all analog input pins
DIDR0 = DIDR0 | B00111111;
la ligne _ar = (double*) [color=red]malloc[/color](_size * sizeof(double)); avec l'appel de la fonction [color=red]malloc[/color] est celle qui alloue de la mémoire dynamique. un double est stocké sur 4 octets. si vous en allouez 250 par exemple, votre buffer fait donc 1000 octets, quasiment la moitié de la RAM de votre arduino Nano. Cette partie de la mémoire n'est pas visible à la compilation puisque allouée lors de l'exécution
la ligne `_ar = (double*) [color=red]malloc[/color](_size * sizeof(double));` avec l'appel de la fonction `[color=red]malloc[/color]` est celle qui alloue de la mémoire dynamique. un double est stocké sur 4 octets. si vous en allouez 250 par exemple, votre buffer fait donc 1000 octets, quasiment la moitié de la RAM de votre arduino Nano. Cette partie de la mémoire n'est pas visible à la compilation puisque allouée lors de l'exécution
J'alloue 2 fois 20 à la construction
J'appel deux fois la fonction addValue en permanence dans le loop ...
Merci pour vos conseils, je viens de mettre un petit bout de code pour afficher la mémoire restante (433 pour l'instant) ... maintenant il va me falloir attendre .... (et concernant l'allocation mémoire, c'est dans la déclaration (donc pas dans le loop)
actuellement j'ai 435 (bytes ?) de dispo ... et ça ne diminue pas ... par contre vu que j'alimente mon Arduino avec une batterie, il se peut que celle-ci diminue trop pour continuer à faire fonctionner correctement le système ... je continue en investiguant sur ce point !