Go Down

Topic: auto reset during the loop() (Read 2145 times) previous topic - next topic

gigiZ

Hello,

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?

thank

CrossRoads

Ooh, that's a good one.

Have any code we can look at?
Does any file manipulation cause that to happen?
Designing & building electrical circuits for over 25 years.  Screw Shield for Mega/Due/Uno,  Bobuino with ATMega1284P, & other '328P & '1284P creations & offerings at  my website.

jraskell


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.

Nick Gammon

Please post technical questions on the forum, not by personal message. Thanks!

More info:
http://www.gammon.com.au/electronics

gigiZ

Here is the function that creates me this problem:

[font=Verdana]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



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

Grumpy_Mike

Quote
I think I do not use any memory:

Yes you do, every variable and print string takes up memory.
Why did you not use the code tags like it said in the link Nick pointed you to?

Nick Gammon

Please edit your post, select the code, and put it between [code] ... [/code] tags.

You can do that by hitting the # button above the posting area.

What does TAILLE_NUM_UTI look like? The declaration?
Please post technical questions on the forum, not by personal message. Thanks!

More info:
http://www.gammon.com.au/electronics

jraskell



Code: [Select]

char numString[TAILLE_NUM_UTI];


Code: [Select]

  numString=myFile.read();
  numString='\0';


numString being an array of chars, the above two are, let's say, inappropriate attempts at assignment.

PaulS

Quote
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.

jraskell


Quote
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.

PaulS

Quote
You are foiling my attempted demonstration of one of the less obvious reasons why code tags are important.

Oops. Sorry about that.

I think that subtlety is lost on people that can't even post code properly, though. A clue-by-four would be a better tool.

jraskell


A clue-by-four would be a better tool.


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.

gigiZ

Here is the function (with the right tags) that creates me this problem:

Code: [Select]
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;
}


It looks in a text file by a user's ID number.

Thanks

PaulS

Code: [Select]
int rechercheUtilisateur(char numUtilisateur[TAILLE_NUM_UTI]){
You STILL have not told us how TAILLE_NUM_UTI is defined or what its value is. Now, where did I put that clue-by-four?

tgm1175

Take a closer look at this section of your code:

Code: [Select]

    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';


Specifically:
Code: [Select]

   char numString[TAILLE_NUM_UTI];
   for(i=0; i<TAILLE_NUM_UTI-1; i++) numString=myFile.read();
  numString='\0';


Last I checked, read() doesn't return a pointer, it returns a single byte.  That shouldn't even compile...

Go Up