Taille tableau pb de mémoire ?

je lis une carte SD et je cherche à stocker les données dans un tableau ce sont de petites lignes de 10 caractères qui seront exécutées comme commandes par la suite. L'enregistrement se fait sans problème. je souhaite ensuite lire complètement le fichier une dizaine de lignes de 10 caractères et la j'ai déclaré un tableau de string vide. Si je lis la carte SD sans la déclaration de mon tableau, l'édition est parfaite j'ai toutes mes lignes. Si je déclare le tableau simplement sans rien faire d'autre, je n'ai plus que 4 lignes qui apparaissent sur la console. Pb de mémoire ?? je sèche

sans le code, nous aussi...

Ne postez pas de questions dans "le bar"... postez les dans le forum francophone principal. Je l'ai déplacé pour vous pour cette fois.

String codeArray[]={};
void Lire_Code(String nomDuFichier){
String buffer;
int ptr =0;
monFichier = SD.open(nomDuFichier,FILE_READ);
if ( monFichier) {
Serial.println("Lecture"); // lecture ligne / ligne
while ( monFichier.available()) {
buffer = monFichier.readStringUntil('\n');
Serial.println(buffer);

si j'ajoute : codeArray[ptr] = buffer; // la le pb
ptr ++;

  }
  monFichier.close( );
  Serial.println("Fermeture");
} else {
  Serial.println("erreur ouverture");
}

}

Ligne de données : 00000-01

Merci de prendre quelques minutes pour lire "Les bonnes pratiques du forum francophone" et les appliquer.

En particulier, la mise en forme du code avec des balises en cliquant sur l'icône <code/>

Merci d'éditer votre post en utilisant le :pencil2: dans la barre d'outil juste sous votre post et rajoutez les balises de de code (c'est difficilement lisible tel quel) :

  • sélectionner la partie du texte qui correspond au code
  • appuyez sur l'icône <code/> dans la barre d'outils pour indiquer que c'est du code

(Assurez vous aussi d'indenter le code correctement dans l'IDE avant de le copier pour le coller ici. Cela se fait en pressant ctrlT sur PC ou cmdT sur un Mac)

il serait bon de (re)lire les recommandations listées dans "Les bonnes pratiques du Forum Francophone”


en C++ vous devez donner une taille au tableau (le nombre d'éléments qu'il doit contenir au max). Ici le tableau est vide, sa taille est 0.

soit vous faites

String codeArray[10]; // max 10 chaînes

soit vous laissez le compilateur décider en fonction de ce que vous passez à l'initialisation

String codeArray[]={"", "", "", "", "", "", "", "", "", ""}; // tableau de 10 chaines initialement vides

j'ai encore appris quelque chose merci. c'est vrai après le basic le pascal assembleur java mon métier en retraite je me mets au C sans oublier l'algèbre de bool , il me manque encore quelques infos en C j 'ai tout mon temps je suis en retraite cordialement. j'ai déclaré une taille au tableau et c'est mieux . Cordialement

Bravo, il faut prendre son temps.

Le tuto de base sur le C++ de OpenClassroom est pas mal pour débuter.

J'ai un beau petit livre Arduino le guide complet. Actuellement, je tr

J'ai un beau petit livre Le guide complet d'Arduino. Actuellement je travaille sur les retours de variables avec la fonction return et construction associées. Cela je ne l'avait pas vu et cela me permettra d'éviter les variables globales.

Il faut bien comprendre ce que cela fait quand on travaille avec des types complexes comme String ou des structures ou des instances de classe .

Ces bouquins arduino se concentrent plus sur la partie montage que sur le C++, c’est gratifiant d’avoir sa led qui clignote mais c’est incomplet…

Je pense qu’il faut les deux et que dans base solide sur le langage vous allez avancer un peu dans le brouillard

retour var multiples

Un peu laconique comme message

En C++ on ne retourne qu’un seul élément avec l’instruction return.

Si vous voulez retourner un groupe de valeurs alors il faut les grouper par exemple dans une structure et retourner la structure

Sinon les paramètres peuvent être passés par référence ou avec un pointeur et la fonction peut les mettre à jour directement

(Tout ça est bien sûr dans le cours C++ :slight_smile: )

Un seul paramètre de retour d'une fonction, je retourne donc une structure que je règle après que mon programme soit complet ou il y a le max des valeurs dont j'ai besoin ( Ex 2 int 3 bool ...). Je remplace tous mes void (param) classiques en fonction avec return() de cette structure. Est ce plus gourmand que des variables globales ???

Les variables globales sont à pour toute la durée du programme

Les variables locales ou retournées par les fonctions sont sur la pile et on pour durée de vie la durée de vie de la fonction englobante

Si vous n’avez besoin que d’un seul lot de variables et il faut qu’elles soient connues de toutes les fonctions alors une variable globale de défend. Si ce sont des données temporaires alors on prend généralement des variables locales (et ça permet éventuellement la récursivité des fonctions).

Éventuellement lisez mon petit tuto

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.