Général Quel est donc le sketch qui se trouve dans mon UNO ?

  • Auteur de la discussion gégé62
  • Date de début
gégé62
gégé62
Compagnon
26 Fev 2013
2 868
Harnes (Pas de Calais)
  • Auteur de la discussion
  • #1
Bonjour,

j'ai essayé de trouver un titre explicite à ce fil.

J'expose le problème:
Quand on met au point un sketch (programme), on en fait x versions, perso j'aime bien conserver les anciennes, je mets des indices et voilà. Et je fais moult essais, parfois en revenant sur une version antérieure....
Comme je suis "foutoir", je n'arrive pas à noter de façon systématique le sketch que je téléverse, et si je suis un moment sans y toucher, je ne sais plus exactement ce qu'il y a dans mon UNO (surtout que j'en ai 5 ou 6).

La plupart du temps ce n'est pas grave, on peut toujours téléverser le sketch qui nous intéresse maintenant. Mais ça heurte ma logique.....et il pourrait exister des cas où on aimerait savoir.
Ne serait-ce que...: p...ain il marche bien celui-là, mais c'est lequel ???? avouez que c'est ballot....

:P:P:P

J'en arrive à mon idée. Il ne s'agit pas d'aller lire le sketch en hexadécimal (:rolleyes: ), mais de se donner un moyen, par programmation, de lire le nom du fichier sur le moniteur. On écrit dans le setup un bout de programme qui écrit ce nom (ou un code plus simple) dans l'Eprom, et ensuite un autre bout de programme qui en fait la lecture, et l'envoie avec Serial.print vers le moniteur.

Si on téléverse un nouveau sketch, avec donc une autre référence, c'est bien automatiquement celle-là qui aura remplacé la précédente. Pour éviter d'écrire inutilement et trop souvent sur l'eprom, on utilise la commande qui ne réécrit que si c'est différent (faut que j'aille revoir la syntaxe...)

La version (codée) du sketch s'affiche donc dès qu'on ouvre le moniteur....

Je vais essayer, mais avant je préfère votre avis là-dessus.....
 
S
scrachi
Apprenti
20 Nov 2014
201
06
Je sait pas si j'ai tout bien compris mais a priori ça semple compliquer car le programme compiler et charger sur l'eeprom, n'est pas humainement lisible donc le seul moyen serait de compiler tous les programme et ensuite de les comparer avec celui sur l'eeprom pour pouvoir définir le quel c'est.

Pour tes version de développement, tu peut utiliser un logiciel de versioning pour gérer tout ça, tu en a plein un des plus connu est gitHub.


Mickaël
 
osiver
osiver
Compagnon
7 Sept 2013
11 859
Ben, vous définissez une constante avec le numéro de version. Puis vous envoyez sa valeur avec le serial.print, à la fin de setup() par exemple.
À vous de modifier la valeur de la constante à chaque modification du sketch :wink:
 
S
scrachi
Apprenti
20 Nov 2014
201
06
La constante n'est pas une mauvaise idée, mais quand tu utilise un arduino en production, c'est très rare que tu ai ton IDE avec sa console derrière.

Mickaël
 
osiver
osiver
Compagnon
7 Sept 2013
11 859
en production, c'est très rare que tu ai ton IDE avec sa console derrière.
Vrai mais on peut y connecter une interface FTDI (usb) et un portable.
D'ailleurs je doute qu'un arduino soit utilisable en production, professionnellement, j'entends. :???:
 
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 242
Corsier-sur-Vevey (Vaud)
@scrachi
c'est très rare que tu ai ton IDE avec sa console derrière.
C'est pas nécessaire de trimballer l'IDE d'arduino.
Un câble USB, un PC avec Hyperterminal ou beaucoup mieux le programme Terminal (ça ne s'invente pas!), gratuit et a tout ce qu'il faut pour développer sur port de communications, je n'utilise que ça depuis pas mal d'années.

Bonne soirée.
 
lion10
lion10
Compagnon
7 Mai 2010
4 720
Bonjour

Pour de la bonne gestion de configuration puisque c'est de cela dont il s'agit il vous faudrait :
-recopier systématiquement les sources dans un répertoire sauvegardé et noter le nom du répertoire.
=> Vous pourriez par exemple recopier les fichiers source (y compris les bibliothèques encore qu'on pourrait supposer qu'elles ne changent pas, mais en toute rigueur il faudrait le faire) en automatique. Il faudrait faire l'équivalent d'un fichier .bat tel qu'il existait sous dos avec en paramètre le numéro de version "Vx.Y". Ainsi tout serait recopié dans un répertoire du style "source version Vx.Y".
-et aussi recopier le fichier exécutable ".hex" (pas sur de l'extension !) qui permet de programmer la mémoire programme de l'arduino !
-associer sur un cahier ce nom de répertoire avec un numéro de version et le checksum.
-noter aussi le numéro de version de l'IDE arduino au moins une fois, en supposant qu'il n'évolue plus.

-mettre sous une forme de texte la version du style "const char * maversion ="version 1.0" puis l'afficher via un "seriat print " au démarrage.
=> Vous n'êtes pas à l'abris d'oublier de changer le numéro de version du logiciel, c'est pourquoi je pense qu'il faudrait afficher le checksum de la mémoire programme et le numéro de version. Ainsi si vous oubliez de changer ce numéro vous verrez au moins le changement de checksum.
Il vous faut donc réaliser la somme de tous les octets de la mémoire programme.
-autre :idea: : voir si via des outils intégrés il y a possibilité de mettre automatiquement dans le code une chaîne de texte avec la date et l'heure du pc.

Il existe sans doute des outils de versionnage automatique mais je ne suis pas certain qu'il fonctionne avec l'environnement de programmation intégré IDE simplifié de l'arduino.

Ps : il faudrait regarder dans les fichiers de sortie de IDE arduino, il y a peut être des fichiers texte du style ".log" qui permettrait de facilliter l'automatisation de cette gestion.
cdlt lion10
 
Dernière édition:
S
scrachi
Apprenti
20 Nov 2014
201
06
Oui quand je parle de production ce n'est pas de la prod professionnel mais pour définir quand l'arduino "accomplis la tache final pour la quel il a été utilisé". Sinon ça oblige toujours à avoir un ordinateur derrière qu'il y ai l'IDE Arduino ou tout autre logiciel
 
gégé62
gégé62
Compagnon
26 Fev 2013
2 868
Harnes (Pas de Calais)
  • Auteur de la discussion
  • #9
je ne sais pas, à mon tour, si j'ai bien compris vos réponses, mais elles ne me semblent pas correspondre à ce je voulais dire.

Je connais assez peu de chose dans le monde de la programmation, des micros, du langage C, j'essaie de me de me débrouiller avec ce que je connais pour arriver à mes fins, et ne suis pas à même d'imaginer, encore moins de mettre en pratique, des solutions élaborée comme évoqué par Lion10.

Je vais prendre un exemple concret pour m'expliquer:

soit mon fichier [ Tachymetre_effet_hall_1.ino ] (il existe, j'en ai fait un sujet sur le forum, j'ajoute seulement ici un indice _1).

Je voudrais écrire le nom de ce fichier dans l'eprom, tout simplement avec la librairie EEPROM, en utilisant
EEPROM Update pour écrire dans l'EEprom le nom du fichier (si différent du nom déja présent)
et
EEPROM Read pour envoyer cette info sur le moniteur.

Ces instructions seraient utilisées dans une fonction que je crée, qui ferait toujours partie de mon sketch de base. Je n'aurai pas à la ré-écrire chaque fois, il n'y aura que le nom de fichier à mettre à jour (voir *)

Mais je crains que le nom de fichier soit un peu long et gaspille de la place dans l'EEprom (1000 octets seulement dans l'UNO). D'où l'idée de renommer chaque fichier sous une forme codée par exemple sur 2 octets, mais qui oblige à tenir un registre de correspondance.

0x00 signifierait "projet tachymètre " / 0x01 " projet CNC" (je rêve :-D ) / 0x02 " projet métronome" etc....
0x00 serait ma version de départ / 0x01 mon sketch en révision 1 / etc....

donc ces correspondances seraient dans un tableau Excel, et si je passe à une version 2 de mon sketch "tachymètre",
je laisserai le premier octet à 0x00, et je passe le second à 0x02

Cela peut sembler une contrainte aussi difficile, mais je n'en suis pas sûr, et quand même c'est une méthode qui associe une information à une carte Arduino donnée et cela me semble important. A la limite, même avec un défaut de mise à jour, il y aura une info sur le projet concerné (en principe le premier octet donnera l'info "projet".

Bien entendu une fois qu'on a retrouvé (sur le moniteur) le nom codé du sketch, puis avec le fichier Excel le nom en clair, je suppose que je sais le retrouver...!

Je n'espère pas déclencher une vague irrésistible de supporters pour cette façon d'opérer :). Mais si je tiens parole, je vais le faire d'ici peu et j'essaierai de vivre avec un moment pour tester. Je dirai ce qu'il en est.

(*)
Il me semble que la façon élégante de procéder serait de créer ma propre librairie (utilisant aussi "EEPROM" bien sûr) de façon à n'avoir qu'un "include" à déclarer en tête, et mes deux octets à renseigner dans le setup. Mais déjà ça c'est pas évident pour moi, alors je le laisse pour plus tard...
 
Dernière édition:
lion10
lion10
Compagnon
7 Mai 2010
4 720
Bonjour

Une piste qui répond partiellement au besoin complet de gestion de configuration telle que je l'ai exposée puisqu'elle n'aborde pas la sauvegarde des fichiers source. Il vous faut utiliser le préprocesseur en mettant dans un fichier source des instructions suivantes en les associant comme il faut. Je viens de tester cela s'affiche bien.
=> Si vous n'avez qu'un fichier source vous mettez cela dans le source mais vous n'aurez pas le numéro de version de gérer. Il faudra en passer par une édition manuel avant compilation.
Serial.print(__FILE__), Serial.print(" => Compilation A"), Serial.print( " la date suivante "), Serial.println(__DATE__);
Serial.print(" A l'heure suivante "), Serial.println(__TIME__);
Serial.print( "Numero de ligne pour info : "), Serial.println(__LINE__);

Ci dessus cela affiche, à vous de modifier pour récupérer la chaîne de caractère du nom de fichier et la mettre en "const" comme cela elle est stockée dans la mémoire flash du micro automatiquement à chaque compilation.
En résumé cette solution simple devrait faire ce que vous voulez :-D:-D, en plus vous n'avez pas à vous soucier de l'eeprom. Mais elle fait pas office à 100% de gestion de configuration. Mais mon discours n'était je l'admet pas adapté pour du logiciel amateur qui se veut être sans trop de contrainte.
Ceci dit l'eeprom je la réserverais plutot pour y stocker d'autres informations en cours de fonctionnement, par exemple le nombre de tour comptés toutes les XX min à chaque fois dans une case différente de l'eeprom (évite d'écrire tjs au même endroit fréquemment) . Ainsi :idea: en laissant toujours votre arduino sur votre machine, vous pourriez calculer le nombre de tours exécutés pour lancer une opération de maintenance. A chaque extinction ce serait sauvegardé.
cdlt lion10
 
Dernière édition:
M4vrick
M4vrick
Compagnon
12 Août 2015
1 127
Je pense que tu cherches à faire bien trop compliqué Gégé.
Pourquoi vouloir stocker en EEPROM ? Ce qui t'intéresse c'est de savoir quel sketch est chargé dans ton Atmega si j'ai bien suivi, pas ce qui est en EEPROM.

Il suffit de prendre l'habitude d'ajouter au début du setup() après l'initialisation du port série un serial.print avec le nom et le numéro de version de ton projet.
Quand tu démarres ton arduino tu auras la version qui s'affiche sur ton moniteur série.

Je le fais systématiquement sur les projets où j'ai un écran, j'affiche la version sur l'écran pendant le setup.
 
gégé62
gégé62
Compagnon
26 Fev 2013
2 868
Harnes (Pas de Calais)
  • Auteur de la discussion
  • #12
Je pense que tu cherches à faire bien trop compliqué Gégé.
Pourquoi vouloir stocker en EEPROM ? Ce qui t'intéresse c'est de savoir quel sketch est chargé dans ton Atmega si j'ai bien suivi, pas ce qui est en EEPROM.

Il suffit de prendre l'habitude d'ajouter au début du setup() après l'initialisation du port série un serial.print avec le nom et le numéro de version de ton projet.
Quand tu démarres ton arduino tu auras la version qui s'affiche sur ton moniteur série.

Je le fais systématiquement sur les projets où j'ai un écran, j'affiche la version sur l'écran pendant le setup.
Je viens de m'en apercevoir....en cherchant à faire ce que je décrivais..... Je me suis trouvé tout c.. ! Je pensais avoir contourné une difficulté, en fait elle n'existe pas, comme tu l'as dit. Merci !

mieux vaut en :lol: ! en plus on y met le nom complet du fichier, c'est encore plus simple.

et pardon pour le temps que j'ai fait perdre aux amis du forum....

C'est marrant, j'avais posé cette question il y a un bout de temps sur le forum arduino, personne n'a pensé à me dire ça. Comme quoi l'usinage...
 
Haut