Un ancien programme peut il etre gardé en mémoire meme si on en charge un nouvea

Bonjour,

j'ai une arduino roméo V2, je suis débutant, j'ai fait des programmes qui commandent 2 moteurs,mais quand je charge un nouveau programme parfois on dirait qu'il exécute des bouts (ou la totalité) d'anciens programmes chargés sur la carte...
Quand on télécharge un nouveau programme sur la carte il n’efface pas la totalité de l'ancien ?
Comment s'assurer que la mémoire est complétement vidée avant de télécharger un nouveau programme, y a t il un code dédié ? Une manip a faire sur la carte ?

Autre question le com change com4 une fois com6 une autre fois... c'est lié a quoi? est ce que cela à un lien avec le pb précédent ?

D'avance merci pour votre aide!

Bonjour,

robotceleste:
Quand on télécharge un nouveau programme sur la carte il n’efface pas la totalité de l'ancien ?

Si et encore heureux, bonjour le bordel si il restait des morceaux par-ci par-là.

Bonne question qui devrait me lever un doute.
Je suis à des années lumières d’avoir un “fluent english” mais j’ai compris l’inverse.
Premièrement rappel de la ligne de commande de l’IDE 1.04 que je viens de vérifier, c’est tout chaud.
Pour mémoire : environnement Linux Debian Jessie
:avrdude -C/usr/share/arduino/hardware/tools/avrdude.conf -v -v -v -v -patmega328p -carduino -P/dev/ttyACM0 -b115200 -D -Uflash:w:/tmp/build254120940595211591.tmp/scan_i2c_bg.cpp.hex:i

Si je regarde la notice d’avrdude 5.11.1 (page 12) je lit pour l’option -D:

Disable auto erase for flash. When the -U option with flash memory is speci-
fied, avrdude will perform a chip erase before starting any of the programming
operations, since it generally is a mistake to program the flash without per-
forming an erase first. This option disables that. Auto erase is not used for
ATxmega devices as these devices can use page erase before writing each page
so no explicit chip erase is required. Note however that any page not affected
by the current operation will retain its previous contents.

J’ai bien l’impression que l’option “-D” désactive l’effacage systématique.
Me foutais-je le doigt dans l’oeil jusqu’au coude ?

Ce que je comprends, c'est que la mémoire est découpée en page et si l'option de ne pas effacer l'ensemble de la mémoire est prise, seules les pages nécessaires au nouveau programme sont effacées.

Ça ne sert à rien d'effacer systématiquement toute la mémoire.

De la même manière, sur un disque dur, on n'efface jamais le fichier, on libère simplement la place qu'il occupe dans la table d'allocation.

La mémoire est découpée en page pour les ATXMega mais pas pour les ATMega, or les micros utilisés dans les cartes arduino sont des ATMega.

-D désactive bien l'effacement avant écriture ...
Mais la raison est peut être au niveau du bootloader (qui ne gère qu'une partie des commandes STK500).

De toute façon, pour les cas d'utilisation "basiques" ça ne change rien d'effacer avant de ré-écrire non ?

L'important c'est que le nouveau programme soit inscrit en mémoire et lancée au démarrage du machin.

On va même dire que ça peut allonger la durée de vide de l'EPROM ou le programme est stoqué.

UniseV:
De toute façon, pour les cas d'utilisation "basiques" ça ne change rien d'effacer avant de ré-écrire non ?

L'important c'est que le nouveau programme soit inscrit en mémoire et lancée au démarrage du machin.

Oui, le seul cas où ça peut poser problème c'est si tu vient taper en dehors du programme (buffer-overflow, pointeur foireux, ...).

UniseV:
On va même dire que ça peut allonger la durée de vie de l'EPROM la FLASH ou le programme est stoqué.

Toi tu veut te faire taper sur les doigts :wink:
On mélange pas les torchons et les serviettes.

merci pour les infos, je ne suis pas assez caler pour tout comprendre mais je n'ai mis aucune option dans le programme, je vais essayer de préciser le pb
j'ai un montage carte arduino roméo V2 avec un chassi qui a 2 moteurs pour les roues
les moteurs sont alimentés par 4 piles (interupteur sur le chassi)
quand je connecte la carte par port USB pour charger le programme, une fois le programme uploadé ca marche (j'ai programmé avance de 5 sec et recule 1 sec) par contre quand je débranche le port USB il ne réalise pas le programme, là par exemple il avance 5 sec, attend 13 clignotement de led blanche de la carte (environ 7 sec), puis avance de 1 sec etc....
comment faire pour que une fois débranché il exécute le programme comme quand il est connecté sur USB ?
merciiiii ! :slight_smile:

Ça ne sentirait pas un problème d'alim par hasard ?

Vérifie au voltmètre la valeur de la tension sur la sortie 5V de la carte arduino le cordon USB branché et débranché.
Et USB débranché la tension au même point les moteurs en action ou arrêtes.

PS pourrait-tu nous faire un petit schéma pour voir comment les alims sont branchées.

hello,

merci beaucoup, tu as fait un bon diag, c'était un problème de faux-contacts...

remerciement à la communauté !!!

:slight_smile: