I am new to programming an Arduino (Mega 2560).
I am on a project that manipulates a file.txt on SD card.
After the execution of a function that searches a number in the file my arduino reset. I don't see why.
Have you any idea what can cause this reset?
gigiZ:
After the execution of a function that searches a number in the file my arduino reset.
Just taking a shot in the dark here, since there's no code to look at, but I'd guess you're reading a large amount of data into SRAM, running out of SRAM, and overwriting the stack. This is a very common cause of Arduino resets.
Here is the function that creates me this problem:
int rechercheUtilisateur(char numUtilisateur[TAILLE_NUM_UTI]){
int i, ligne = 1;
//declaration des tableaux locaux
char numString[TAILLE_NUM_UTI];
//place le pointeur au debut du fichier
myFile.seek(0);
//retrieve the ID number of the line
for(i=0; i<TAILLE_NUM_UTI-1; i++) numString*=myFile.read(); *
_ numString*='\0';*_
* while(strcmp(numUtilisateur, numString)){* * if(!sautDeLigne()){ //move to the next line* * myFile.seek(0);* * return 0;* * }*
* ligne++;* * //retrieve the ID number of the line* * for(i=0; i<TAILLE_NUM_UTI-1; i++){ _ numString=myFile.read(); } numString='\0'; } //place le pointeur au debut de la ligne* * myFile.seek(myFile.position()-TAILLE_NUM_UTI);* * return ligne; } [/font] It looks in a text file by a user's ID number. sample text file: 10000001 Marson Julien 7654 31678 11/05/2012 enseignant physique 03/04/2012 Fabre oui non 10000002 Zygmaniak Ghislain 55 21234 10/05/2012 etudiant physique 02/04/2012 Fabre oui non 63802020 Verron Maxime 234 22222 12/05/2012 etudiant mathématique 04/04/2012 Fabre non oui 63802021 Dumont Tony 34 22 12/04/2012 etudiant mathématique 04/04/2012 Fabre oui non > jraskell: > > gigiZ: > > After the execution of a function that searches a number in the file my arduino reset. > > > > Just taking a shot in the dark here, since there's no code to look at, but I'd guess you're reading a large amount of data into SRAM, running out of SRAM, and overwriting the stack. This is a very common cause of Arduino resets.* I think I do not use any memory: Binary sketch size: 17932 bytes (of a 258048 byte maximum) Thanks_
numString being an array of chars, the above two are, let's say, inappropriate attempts at assignment.
Perhaps you noticed the switch to italics midway through the (poorly posted) code? The assignment is valid, and would be properly apparent if the code was posted properly.
numString being an array of chars, the above two are, let's say, inappropriate attempts at assignment.
Perhaps you noticed the switch to italics midway through the (poorly posted) code? The assignment is valid, and would be properly apparent if the code was posted properly.
You are foiling my attempted demonstration of one of the less obvious reasons why code tags are important. No worries, the point should be made anyways.
Haha. That's a new one to me, wasn't really sure what you meant, though what initially came to mind when I read it was 'four letter words'. After a quick google, I find I'm not all that far off the mark. I do like the two-by-four analogy more though.
Here is the function (with the right tags) that creates me this problem:
int rechercheUtilisateur(char numUtilisateur[TAILLE_NUM_UTI]){
int i, ligne = 1;
//declaration des tableaux locaux
char numString[TAILLE_NUM_UTI];
//place le pointeur au debut du fichier
myFile.seek(0);
//retrieve the ID number of the line
for(i=0; i<TAILLE_NUM_UTI-1; i++) numString=myFile.read();
numString='\0';
while(strcmp(numUtilisateur, numString)){
if(!sautDeLigne()){ //move to the next line
myFile.seek(0);
return 0;
}
ligne++;
//retrieve the ID number of the line
for(i=0; i<TAILLE_NUM_UTI-1; i++){
numString=myFile.read();
}
numString='\0';
}
//place le pointeur au debut de la ligne
myFile.seek(myFile.position()-TAILLE_NUM_UTI);
return ligne;
}
char numString[TAILLE_NUM_UTI];
//place le pointeur au debut du fichier
myFile.seek(0);
//retrieve the ID number of the line
for(i=0; i<TAILLE_NUM_UTI-1; i++) numString=myFile.read();
numString='\0';
int rechercheUtilisateur(char numUtilisateur[TAILLE_NUM_UTI]){
int i, ligne = 1;
//declaration des tableaux locaux
char numString[TAILLE_NUM_UTI];
//place le pointeur au debut du fichier
myFile.seek(0);
//recupére le numéro d'identifiant de la ligne
for(i=0; i<TAILLE_NUM_UTI-1; i++) numString[i]=myFile.read();
numString[i]='\0';
while(strcmp(numUtilisateur, numString)){
if(!sautDeLigne()){
myFile.seek(0);
return 0;
}
ligne++;
//met dans 'numString' le numéro d'identifiant de la ligne
for(i=0; i<TAILLE_NUM_UTI-1; i++){
numString[i]=myFile.read();
}
numString[i]='\0';
}
//place le pointeur au debut de la ligne
myFile.seek(myFile.position()-TAILLE_NUM_UTI);
return ligne;
}
TAILLE_NUM_UTI is defined in the beginning of the code:
strcmp() returns 0 if the strings match, or -1 or +1 if they don't match, depending on whether string 1 comes before or after string 2. It does NOT return a boolean, so this code should not be written as though it does. Explicitly state what you are expecting.