Go Down

Topic: Impossible d' UPLOADER ma MEGA 2560 (Read 2246 times) previous topic - next topic

jlpic

J'utilise une arduino mega 2560 et arduino PC 1.01 . tout a marché super j'usqu'a ce que le code indique une valeur de 44000 octets sur un max de 258048 octets . Au dela ca compile bien , indique la taille et se met a transferer sur la carte  . Ensuite ca ne bouge plus : planté !!

Si je sort un peu de code , debrancher rebrancher ca repart !!!!

C'est pourtant une carte Rev3 .

Auriez vous une piste SVP !!!!!!!

Merci par avance
JLUC

barbudor

Bonjour Jean-Luc

Quels sont les derniers messages à la fin du téléchargement ?

D'après ce que tu décris je pense que le téléchargement se passe bien mais que ton programme plante.
Ce n'est pas un problème de taille du code puisque tu es bien en dessous de la taille maxi.
C'est donc soit une section particulière du code qui pose problème -> analyser en détail le code que tu retire et qui fait amrcher
Soit une sur occupation mémoire RAM

Tout d'abord je te suggère de trouver un moyen de vérifier que ton code démarre bien.
Notamment tu peux faire pulser la led de la carte 2 ou 3 fois très rapidement d'une manière bien distinctive.
Tu peux aussi mettre au début du programme une boucle pour attendre un caractère sur le moniteur série de façon a ce que le programme ne commence pas tant que tu n'as pas lancé le moniteur afin de suivre son déroulement avec des Serial.print.
Pour ce qui est de surveiller la consommation de mémoire RAM, regarde de ce coté : http://www.arduino.cc/playground/Code/AvailableMemory

jlpic

Merci Barbudor !

Il y avais 2 lignes de code strictement anodine qui posaient probleme ! Pourquoi : la est la question .
Je les ai virées et la je repart en affection avec mon proto arduino !

barbudor

Peut être veux tu publier ces lignes de code pour que l'on essaye de comprendre ?

jlpic

ben oui bouge pas :


void controlpesee()
{


chaine7=String(ligne).substring(20,31);
Serial.print(chaine7);
Serial.println("-");

if ( String(bouclelue)== (chaine7))
{

//peseeok=1;
//Serial.println("TROUVEE !!!");

chaine8=String(ligne).substring(32,40);

rangchaine[0]=chaine8[0];
rangchaine[1]=chaine8[1];
rangchaine[2]=chaine8[2];
rangchaine[3]=chaine8[3];
Serial.print(chaine8[0]);
Serial.println("-");
Serial.print(chaine8[1]);
Serial.println("-");
Serial.print(chaine8[2]);
Serial.println("-");
Serial.print(chaine8[3]);
Serial.println("-");
Serial.print(rangchaine[0]);
Serial.println("-");
Serial.print(rangchaine[1]);
Serial.println("-");
Serial.print(rangchaine[2]);
Serial.println("-");
Serial.print(rangchaine[3]);
Serial.println("-");


rang=rangchaine.toInt;
rang=0;

Serial.print(chaine8);
Serial.println("-");
Serial.println(rangchaine);
Serial.println(rang);
peseeok=1;
}


elles sont slashées !
tous les serial.print sont pour débuguer mon boulot . Pour info je fabrique un lecteur rfid portable !!!
merci encore

barbudor

Gasp
Là je sèche.
J'ai du mal à comprendre pourquoi une simple affectation de variable et un Serial.println() ferait planter ton programme.

Peut être es tu très juste en mémoire RAM ?

Jète un coup d'oeil au lien AvailableMemory que je t'ai donné plus haut et affiche régulièrement la mémoire dispo.

Comme indiqué dans un autre topic, l'utilisation de String a tendance à cacher comment la mémoire est utilisée.

Pourquoi utiliser String(ligne).substring(..) ?
Est-ce que ligne est une String ?
Si oui tu peux utiliser directement ligne.substring(...);
Sinon apprend a te passer de String et d'éviter les copies inutiles.

skywodd

Bonjour,

Des String ... des String partout ...
Cherche pas plus loin t'as plus (ou presque plus) de RAM disponible ...
La chaine de caractères du Serial.print() devait être la goute d'eau qui fait déborder le vase.

Utilise le code du lien "AvailableMemory" de barbudor, à mon avis tu vas avoir une mauvaise surprise ;)
(La classe String ne devrait pas exister ... c'est une hérésie de l'avoir porté sur AVR ...)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up