Pages: [1]   Go Down
Author Topic: fuite de mémoire et datalogguing !  (Read 575 times)
0 Members and 1 Guest are viewing this topic.
Region ile de france.
Offline Offline
Sr. Member
****
Karma: 4
Posts: 451
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut a tous
j'ai un problème de perte de mémoire sur mon système j'ai réussi a isoler la partie responsable m'ai je n'arrive pas a trouver la raison de cette perte de mémoire.

en gros j’utilise pour visualiser la mémoire utiliser la librairie MemorieFree.h et sur le terminal série je vois qu'a chaque fois que j’exécute mon code de dattalogguing je perd en mémoire RAM 31 octet , du coup au bout de quelque temps l'arduino plante.

je pige pas d'où ça viens!

voici mon code de dattalogging :
Code:
void DattaLog(){

  char nomfichier [13];
  sprintf(nomfichier, "%02i%02i%04i.txt", day, month, year);//affichage heure et date

  file = SD.open(nomfichier, FILE_READ); 
  if (file==false) {
    file =SD.open(nomfichier, FILE_WRITE);
    if( file==true){
      file.print(F("Fichier du : "));
      file.print(day);
      file.print(F("/"));
      file.print(month);
      file.print(F("/"));
      file.println(year);
      file.print(F("heure de lever : "));
      file.print(int(Time_ON/3600));
      file.print(F("H"));
      file.println(int(float (Time_ON)/60-(floor(float(Time_ON)/3600)*60)));
      file.print(F("heure de coucher : "));
      file.print(int(Time_OFF/3600));
      file.print(F("H"));
      file.println(int(float (Time_OFF)/60-(floor(float(Time_OFF)/3600)*60)));
      file.print(F("Duree d'eclairage : "));
      file.print((float(Time_OFF)-float(Time_ON))/3600);
      file.println(F("H"));
      file.println(F("les donnees sont au format suivant : "));
      file.println(F("temps;Temperature piece; Temperature Terra; humidite Piece "));
      file.print(temps());
      file.print(F(";"));
      file.print(temp_sonde[sonde_piece]);
      file.print(F(";"));
      file.print(temp_sonde[sonde_terra]);
      file.print(F(";"));
      file.println(HumiditePiece);
    };
  }
  else{
    file =SD.open(nomfichier, FILE_WRITE);
    if( file==true){
      long fin=file.size();
      file.seek(fin+1L);
      sprintf(Buff_afichage, "%02i:%02i:%02i", hour, min, sec);//impresion heure
      file.print(Buff_afichage);
      file.print(F(";"));
      file.print(temp_sonde[sonde_piece]);
      file.print(F(";"));
      file.print(temp_sonde[sonde_terra]);
      file.print(F(";"));
      file.println(HumiditePiece);
    };
  };
  file.close();
  return;
}

merci smiley-wink
Logged


France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3627
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je ne connais pas très bien la librairie SD mais je vois que tu fais 2 SD.open mais tu ne fais qu'un close.
Peut être tenter ça:
Code:
void DattaLog(){

  char nomfichier [13];
  sprintf(nomfichier, "%02i%02i%04i.txt", day, month, year);//affichage heure et date

  file = SD.open(nomfichier, FILE_READ); 
  file.close();    // au cas ou un tampon ne serait pas libéré implicitement lorsque tu fais un open juste après.
  if (file==false) {
    file =SD.open(nomfichier, FILE_WRITE);
    if( file==true){
      file.print(F("Fichier du : "));
Logged

Region ile de france.
Offline Offline
Sr. Member
****
Karma: 4
Posts: 451
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

en faisant ce que tu m'indique la seconde partie de ma fonction , a savoir , ecrire des donnée a la fin du fichier , ne marche plus , mais il n'y a plus de fuitede memoir je regarde donc ce qui peut bloquer dans la seconde partie du programe!
Logged


Region ile de france.
Offline Offline
Sr. Member
****
Karma: 4
Posts: 451
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bon j'y comprend rien j'ai trafiqué le code de ma fonction et maintenant sa marche mais je suis incapable de dire pourquoi!!! smiley-eek
enfin merci de ton aide et voici le code de la fonction qui je pense peut servire a d'autre smiley-wink
Code:
void DattaLog(){

  char nomfichier [13];
  long fin;
  boolean fichierok;
  sprintf(nomfichier, "%02i%02i%04i.txt", day, month, year);//affichage heure et date
  sprintf(Buff_afichage, "%02i:%02i:%02i", hour, min, sec);//impresion heure
 
  fichierok= SD.exists(nomfichier);
  
  file =SD.open(nomfichier, FILE_WRITE);
  if(file==true){
  if (fichierok==false) {
    
      file.print(F("Fichier du : "));
      file.print(day);
      file.print(F("/"));
      file.print(month);
      file.print(F("/"));
      file.println(year);
      file.print(F("heure de lever : "));
      file.print(int(Time_ON/3600));
      file.print(F("H"));
      file.println(int(float (Time_ON)/60-(floor(float(Time_ON)/3600)*60)));
      file.print(F("heure de coucher : "));
      file.print(int(Time_OFF/3600));
      file.print(F("H"));
      file.println(int(float (Time_OFF)/60-(floor(float(Time_OFF)/3600)*60)));
      file.print(F("Duree d'eclairage : "));
      file.print((float(Time_OFF)-float(Time_ON))/3600);
      file.println(F("H"));
      file.println(F("les donnees sont au format suivant : "));
      file.println(F("temps;Temperature piece; Temperature Terra; humidite Piece "));
      file.print(Buff_afichage);
      file.print(F(";"));
      file.print(temp_sonde[sonde_piece]);
      file.print(F(";"));
      file.print(temp_sonde[sonde_terra]);
      file.print(F(";"));
      file.println(HumiditePiece);
      };
 if (fichierok==true) {
      fin=file.size();
      file.seek(fin+1L);
      file.print(Buff_afichage);
      file.print(F(";"));
      file.print(temp_sonde[sonde_piece]);
      file.print(F(";"));
      file.print(temp_sonde[sonde_terra]);
      file.print(F(";"));
      file.println(HumiditePiece);
};
};
  file.close();
  return;
}

« Last Edit: February 14, 2013, 11:11:57 am by Heloderma-kris » Logged


France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3627
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
en faisant ce que tu m'indique la seconde partie de ma fonction , a savoir , ecrire des donnée a la fin du fichier , ne marche plus
Logique (en même temps je n'y avais pas pensé avant) en faisant file.close on perd l'état qui est testé ensuite.

Je pense que cette version (qui reprend ta 1ère version) devrait fonctionner
Code:
void DattaLog(){

  char nomfichier [13];
  sprintf(nomfichier, "%02i%02i%04i.txt", day, month, year);//affichage heure et date

  fichierok= SD.exists(nomfichier);
 
  if (fichierok==false) {
    file =SD.open(nomfichier, FILE_WRITE);
    if( file==true){
      file.print(F("Fichier du : "));
      file.print(day);
      file.print(F("/"));
      file.print(month);
      file.print(F("/"));
      file.println(year);
      file.print(F("heure de lever : "));
      file.print(int(Time_ON/3600));
      file.print(F("H"));
      file.println(int(float (Time_ON)/60-(floor(float(Time_ON)/3600)*60)));
      file.print(F("heure de coucher : "));
      file.print(int(Time_OFF/3600));
      file.print(F("H"));
      file.println(int(float (Time_OFF)/60-(floor(float(Time_OFF)/3600)*60)));
      file.print(F("Duree d'eclairage : "));
      file.print((float(Time_OFF)-float(Time_ON))/3600);
      file.println(F("H"));
      file.println(F("les donnees sont au format suivant : "));
      file.println(F("temps;Temperature piece; Temperature Terra; humidite Piece "));
      file.print(temps());
      file.print(F(";"));
      file.print(temp_sonde[sonde_piece]);
      file.print(F(";"));
      file.print(temp_sonde[sonde_terra]);
      file.print(F(";"));
      file.println(HumiditePiece);
    };
  }
  else{
    file =SD.open(nomfichier, FILE_WRITE);
    if( file==true){
      long fin=file.size();
      file.seek(fin+1L);
      sprintf(Buff_afichage, "%02i:%02i:%02i", hour, min, sec);//impresion heure
      file.print(Buff_afichage);
      file.print(F(";"));
      file.print(temp_sonde[sonde_piece]);
      file.print(F(";"));
      file.print(temp_sonde[sonde_terra]);
      file.print(F(";"));
      file.println(HumiditePiece);
    };
  };
  file.close();
  return;
}
Logged

Region ile de france.
Offline Offline
Sr. Member
****
Karma: 4
Posts: 451
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci ça marche fin de la  fuite! smiley-mr-green
Logged


Pages: [1]   Go Up
Jump to: