Plantage avec tinyFAT

Bonsoir à toutes et à tous,

Suite à un problème dans un sketch bien plus important, j'ai isolé ce problème que je reporte dans le sketch suivant. Cela fonctionne avec une mega2560 et un écran tactile 320 x 240 possédant un lecteur de carte SD.
Tel qu'il est, la conjonction des instructions "dtostre" et "writeLn" fait que ça plante systématiquement à la 237 éme itération !!!

  • Si vous remplacez le "dtostre" par le "dtostrf" ça va planter aussi mais à une autre itération et pas de manière systématique sur la même.
  • Si on utilise le texte "Pierre" à la place des "dtostrf ou e", ça ne plante plus.

J'ai essayé de faire varier différents choses :

  • la vitesse de transfert de la SD,
  • la précision des "dtostrf ou e",
  • la taille du buffer,
  • introduire un délai entre les "dtostrf ou e" et le writeLn,
#include <UTFT.h>
#include <tinyFAT.h>

UTFT myGLCD(ITDB32S, 38, 39, 40, 41);
extern uint8_t SmallFont[];
char bufD[32];

void setup() {

  myGLCD.InitLCD(PORTRAIT);
  myGLCD.clrScr();
  myGLCD.fillScr(VGA_WHITE);
  myGLCD.setFont(SmallFont);
  myGLCD.setColor(VGA_BLACK);
  myGLCD.setBackColor(VGA_WHITE);

  myGLCD.print("ESSAI", CENTER, 20);
  file.initFAT(/*SPISPEED_MEDIUM*/);
  file.create("MonTexte.txt");
  file.openFile("MonTexte.txt", FILEMODE_TEXT_WRITE);
  double dd;
/*  bufD[0] = 'P';
  bufD[1] = 'i';
  bufD[2] = 'e';
  bufD[3] = 'r';
  bufD[4] = 'r';
  bufD[5] = 'e';
  bufD[6] = 0;*/
  for (int i = 0; i < 1000; i++) {
    dd = 1.0*i;
//    dtostrf(dd, 3, 15, bufD); 	
    dtostre(dd, bufD, 15, 0); 
    file.writeLn(bufD);
    myGLCD.print(bufD, CENTER, 60);
  }
  file.closeFile();
}

void loop() {
  // put your main code here, to run repeatedly: 

}

Voilà, je n'arrive pas à trouver de solution.

Si vous avez une idée de là où ça vient et plus précisément ce qu'il faut faire pour que cela ne plante plus ...

Merci de votre aide.

Pierre

Il serait peut être intéressant de regarder la consommation de mémoire au cas ou il y aurait une fuite.
http://playground.arduino.cc/Code/AvailableMemory

fdufnews:
Il serait peut être intéressant de regarder la consommation de mémoire au cas ou il y aurait une fuite.
Arduino Playground - HomePage

J'ai fini par mettre en doute la carte SD. Un ami ayant la même carte a le même problème. J'en ai acheté une autre et, miracle, cela fonctionne !

Par ailleurs, j'ai changé de bibliothèque, je suis passé de tinyFAT à SPI et SD. Avec ces dernières bibliothèques, toutes mes cartes fonctionnent !

Je ne suis pas assez pointu en C++ pour aller analyser les codes, mais je suppose que les méthodes employées doivent différer.

Cordialement.

Pierre