Go Down

Topic: Effacer completement le programme d'une Mega (Read 3 times) previous topic - next topic

lolo81

Bonjour,
ayant depuis peu une Mega, je me lance dans beaucoup de tests pour me familiariser avec le code et la carte, ce matin suite à une erreur dans le code, je peux faire defiler sur l'écran LCD une partie du code d'un autre projet.  :smiley-eek:
Un reset de la Mega ne change rien.
J'en conclue que le fait de charger un projet avec l'application Arduino (1.0.2) n'efface pas systématiquement le précédent programme.
Es-ce moi qui n'effectue pas une action avant tout chargement ou c'est un bug?
Merci pour vos réponses,
Débutant mais acharné!!

Jean-François

Essaye d'uploader avec un setup() et une loop() vide, ensuite tu remets ton programmes et tu regarde si tu as toujours tes "déchets" qui sont à l'écran
MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

lacolombenoir

#2
Nov 25, 2012, 10:09 am Last Edit: Nov 25, 2012, 10:11 am by lacolombenoir Reason: 1
Vérifie dans l'ide que ta carte méga soit préciser, et regarde si les leds tx et rx clignote lors de l'upload.
www.hatokuro.comuf.com site consacrer au rétrogaming

lolo81

Merci pour vos réponses rapides,
j'ai comme a dit Jean-François chargé un projet  vide, maintenant c'est ok je n'ai plus d'affichage d'ancien projets.
Bizarre tout de même non?
Bon faut dire que j'upload énormément!! avec beaucoup de bugs programme car je débute!!  :smiley-red:
Bon week-end ! !
Débutant mais acharné!!

Super_Cinci

Salut,

J'imagine que si tu upload un programme de 3Ko puis ensuite un autre de 1Ko, l'upload ne doit pas inscrire des 0 dans les 2Ko suivants de la flash (sinon, bonjour les temps d'upload à chaque fois s'il faut remettre à Z toute la flash!). C'est comme un disque dur, les données ne sont pas effacées à la simple suppression d'un fichier, mais n'étant plus référencées, elles seront un jour écrasées par une autre écriture.

Dans ce cas, il restera des vieux morceaux de code dans les 2Ko de flash en question, mais est-ce vraiment gênant?

Jean-François


Salut,

J'imagine que si tu upload un programme de 3Ko puis ensuite un autre de 1Ko, l'upload ne doit pas inscrire des 0 dans les 2Ko suivants de la flash (sinon, bonjour les temps d'upload à chaque fois s'il faut remettre à Z toute la flash!). C'est comme un disque dur, les données ne sont pas effacées à la simple suppression d'un fichier, mais n'étant plus référencées, elles seront un jour écrasées par une autre écriture.

Dans ce cas, il restera des vieux morceaux de code dans les 2Ko de flash en question, mais est-ce vraiment gênant?


Pas sur de ce que tu avances, parce que sinon, l'upload d'un programme "vide" n'effacerait justement pas le précédent.
MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Super_Cinci

Le bootloader aurait une commande d'effaçage complet de la flash?

lolo81

Afin d'être sur il faudrait pouvoir lire la totalité du contenu et l'afficher puis faire des tests d'effacement, là on serait sur de la réponse et de la conduite à tenir, mais bon je ne sais pas si c'est possible.


Débutant mais acharné!!

Super_Cinci

Savoir qu'il peut rester des bouts d'un ancien programme, ok. Maintenant, je me dis que si c'est pas du code sensible contenant des algos sous brevet ou secret-défense, est-ce que ça dérange? La flash est une zone qui contient dans une partie le code utile, dans le reste, je dirais que c'est un espace de stockage comme l'eeprom, c'est-à-dire que les données se trouvant là, si on les lit, c'est qu'on en a besoin et qu'on les avait écrites volontairement...

:smiley-roll:

fdufnews

#9
Nov 25, 2012, 03:21 pm Last Edit: Nov 25, 2012, 03:27 pm by fdufnews Reason: 1
Quote
Afin d'être sur il faudrait pouvoir lire la totalité du contenu et l'afficher puis faire des tests d'effacement, là on serait sur de la réponse et de la conduite à tenir, mais bon je ne sais pas si c'est possible.

En même temps quel est l’intérêt?
Si des octets d'un ancien programme ne sont pas effacés on a aucune raison d'exécuter ce code sauf si on fait une erreur dans le programme qui a été écrit après.
Donc normalement on ne doit jamais retomber dans l'ancien code.

Bon un bout de code pour les curieux
Code: [Select]
#include <avr/pgmspace.h>


PROGMEM prog_char octet[] = {0};

void setup(void){
  unsigned int i,j;
  unsigned char myChar;
 
  Serial.begin(9600);
  Serial.println();
  Serial.println("Dump memoire programme");
  for (i=0;i<32768;i+=16){
    Serial.print(i,HEX);
    Serial.print(" : ");
    for (j=0;j<16;j++){
      myChar =  (pgm_read_byte_near(octet + i+j) & 0xFF);
      //myChar =  i & 0xFF;
      if (myChar<0x10)
        Serial.print("0");
      Serial.print(myChar,HEX);
      Serial.print(" ");
    }
    Serial.print("   ");
    for (j=0;j<16;j++){
      myChar =  (pgm_read_byte_near(octet + i+j) & 0xFF);
      //myChar =  i & 0xFF;
      if((myChar>0x20) && (myChar<128))
        Serial.write(myChar);
      else
        Serial.print(" ");
    }
    Serial.println("");
  }
}

void loop(void){
}


Affiche le contenu de la mémoire. L'origine n'est pas le début de la mémoire mais l'adresse de la variable octet. De ce que j'ai pu voir cette variable est au début de la mémoire car au bout de quelques lignes je trouve ma chaine de titre "Dump memoire programme".
Le programme est fait un peu à l'arrache. J'ai fixé la longueur du dump à 32768 directement dans le code, suivant le micro utilisé il faudra peut être changer.
Et les lignes se décalent suivant l'adresse, j'ai oublié de tester la longueur de l'adresse pour aligner les colonnes.

En tout cas cela confirme que la mémoire n'est pas effacée au-delà du nouveau programme j'ai retrouvé des "restes" de vieux programmes que j'ai fait il y a un bon bout de temps.
Mais comme je le disais au début on ne doit jamais retomber dans le vieux code sauf plantage.

lacolombenoir

La tournure de cette discutions pourrait inspirer un épisode des experts, dont la clé de l'énigme aurait été de retrouver un morceau de code a moitiez supprimer a l'intérieur d'une eeprom qui aurait permis un meurtre :D.
www.hatokuro.comuf.com site consacrer au rétrogaming

Super_Cinci


Mais comme je le disais au début on ne doit jamais retomber dans le vieux code sauf plantage.
Plantage, oui, mais du au compilateur, c'est loin d'arriver ça...

fdufnews


La tournure de cette discutions pourrait inspirer un épisode des experts, dont la clé de l'énigme aurait été de retrouver un morceau de code a moitiez supprimer a l'intérieur d'une eeprom qui aurait permis un meurtre :D.

Oh lacolombenoir à quoi il te sert ton arduino? Dans le mien il n'y a que des trucs bien innocents....

lacolombenoir

Mon Arduino n'a tuer personne pour l'instant, si sa peu te rassurer,
Mais qui-sais grâce à se topic un tueur a l'arduino pourra assurée c'est arière XD.
www.hatokuro.comuf.com site consacrer au rétrogaming

lolo81

Pour résumer et faire simple,
tant que le nouveau programme reste inférieur à l'ancien il reste obligatoirement la suite de l'ancien programme.
Il n'est nécessaire de supprimer ce reste car il n'est pas gênant pour le fonctionnement.
Pour vider la mémoire dans la boucle de fdufnews il faudrait rajouter  l'écriture de "FF"" dans le cas ou la lecture serait différente mais bon
au final il n'y aura rien a gagner.


Débutant mais acharné!!

Go Up