Go Down

Topic: [RESOLU] Formatage fichier XML (Read 3287 times) previous topic - next topic

SesechXP

#15
Oct 31, 2012, 09:21 am Last Edit: Oct 31, 2012, 10:55 am by SesechXP Reason: 1
D'après la page de la bilbiothèque SD, elle gère le FAT32 :)
Julien - www.idreammicro.com

barbudor

C'est bien 512 fichiers ou répertoires pour le répertoire racine car la FAT pour le répertoire racine est de taille fixe
Cette limite saute pour les sous répertoires qui peuvent être étendus dynamiquement sur plusieurs clusters

... en théorie

Car effectivement il faudrait vérifier que l'implémentation Arduino permette de gérer le cas général.
A la place de l'auteur, je ne me serais pas embarrassé d'une implémentation complète pour un micro 8 bit.
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

PITP2

j'essaie déjà de former le nom du fichier me permettant de créer le fichier sur la carte SD.
voila une partie du code mais cela ne créé pas le fichier avec le nom espéré ... lol
la nuit porte conseil comme ondit

Code: [Select]
nbrefichier = nbrefichier + 1;
    nomfichier = nbrefichier + ".txt";
    char charBuf[nomfichier.length()+1];
    nomfichier.toCharArray(charBuf, nomfichier.length()+1);
   
    Serial.println(nomfichier);
    //---- crée fichier en écriture ---
    file = SD.open(charBuf, FILE_WRITE); // ouvre le fichier en écriture

vohu

pourquoi ne pas coder le nom du fichier en C plutot qu'en C++ ?

PITP2

Euh j'ai fait ca moi ?  :smiley-eek:

barbudor

Ca veut dire "Pourquoi utiliser la classe String plutot que rester avec des char[] ?"

La classe String est attirante parce qu'elle propose un certain nombre de fonctions utiles mais :
- les fonctions ne sont pas exhaustives et c'est compliqué si tu veux l'étendre
- le classe string est basé sur de la gestion de mémoire dynamique ce qui peut rapidement devenir problématique sur un micro avec peu de mémoire

De plus il semble que le compilo fournit avec Arduino (WinAVR 2009) comporte pas mal de bug concernant la gestion de mémoire dynamique.

Donc il est préférable de se passer autant que possible de la classe String.

Code: [Select]

char charBuf[13]; // 8+'.'+3+'\0' = 13
nbrefichier = nbrefichier + 1;
sprintf("%08d.txt", charBuff, nbrefichier );
Serial.println(charBuff);
//---- crée fichier en écriture ---
file = SD.open(charBuf, FILE_WRITE); // ouvre le fichier en écriture

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

vohu

attention barbudor, sprintf ne s'utilise pas comme ça.
c'est sprintf(charDest, "ma tambouille avec le formatage %d %s", les, variables)

Code: [Select]
sprintf(charBuff, "%08d.txt", nbrefichier );

barbudor

exact, j'ai inversé les 2 premiers paramètres
veuillez pardonner cette erreur due à mon grand age XD
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

PITP2

Merci à tous
voici le code qui fonctionne en fonction de ce que vous m'avez dit

Je vais taguer le poste comme résolu !  :)

Code: [Select]
// Mise en forme du nom du fichier .txt 
char datafile[13];
int jour=day();
int mois = month();
int heure= hour();
int minut= minute();

sprintf(datafile,"%02d%02d%02d%02d.txt",mois,jour,heure,minut);  //  %d pour un int

     //----- initialisation de la carte SD -----
    Serial.println( (__FlashStringHelper *)PSTR("Initialisation de la SD card..."));

    SD.begin(brocheSDCardSelect); // initialisation de la carte SD avec broche 4 en tant que CS - renvoie true/false
   
   
   
    Serial.println(datafile);
    //---- crée fichier en écriture ---
    file = SD.open(datafile, FILE_WRITE); // ouvre le fichier en écriture

skywodd

Question juste comme ça, pourquoi :
Code: [Select]

Serial.println( (__FlashStringHelper *)PSTR("Initialisation de la SD card..."));


Et non tout simplement :
Code: [Select]

Serial.println(F("Initialisation de la SD card..."));
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

barbudor

Je crois que je suis le fautif  :smiley-fat:
Je connaissais PSTR et _FlashStringHelper mais pas F() que j'ai trouvé récemment
J'ai donc orienté PITP2 la dessus....
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

PITP2

La question est est ce que cela fait que l'on gagne un peu d'espace mémoire supplémentaire ?

skywodd


Je crois que je suis le fautif  :smiley-fat:
Je connaissais PSTR et _FlashStringHelper mais pas F() que j'ai trouvé récemment
J'ai donc orienté PITP2 la dessus....

F() c'est juste le cast tout fait :
Code: [Select]
#define F(string_literal) (reinterpret_cast<__FlashStringHelper *>(PSTR(string_literal)))


La question est est ce que cela fait que l'on gagne un peu d'espace mémoire supplémentaire ?

Non mais ça fait des caractères en moins à écrire et ça fait plus propre :smiley-mr-green:
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up