2017-09-29 5 views
0

Existe-t-il un moyen de détecter la version du code ou des informations telles que la dernière mise à jour ou la taille du code ou la taille du code binaire?Arduino: Détecter les informations de code

Voici par exemple:

void setup() { 
    // initialize digital pin LED_BUILTIN as an output. 
    pinMode(LED_BUILTIN, OUTPUT); 
} 

// the loop function runs over and over again forever 
void loop() { 
    digitalWrite(LED_BUILTIN, HIGH); 
    // turn the LED on (HIGH is the voltage level) 
    delay(1000); 
    // wait for a second 
    digitalWrite(LED_BUILTIN, LOW); 
    // turn the LED off by making the voltage LOW 
    delay(1000); 
    // wait for a second 
} 

Si je télécharge le code à Arduino, puis-je détecter toute information à l'intérieur Arduino en ce qui concerne la taille du code ou la dernière modification ou télécharger le temps etc?

Merci.

Répondre

0

Le temps que vous ne pouvez pas obtenir. L'Arduino n'a aucune horloge ou aucun moyen de connaître l'heure.

La taille de code que vous pourriez obtenir si vous utilisez AvrDude pour lire le code hexadécimal sur la puce, puis regardez simplement la taille de ce que vous lisez.

1

La date de compilation est stockée dans la macro __DATE__, l'heure système actuelle lors de la compilation est stockée dans la macro __TIME__. La macro __FILE__, qui stocke le nom de fichier, peut également être utile. Référence (et les macros): http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_preprocessor.Pre-defined_macros.html

Il y a une discussion intéressante sur quelque chose le long de ces lignes ici:

https://github.com/arduino/Arduino/issues/5618

Dans ce fil on discute des façons de stocker le hachage Git du code au moment de la compilation/téléchargement. Si vous utilisez le contrôle de version de Git, cette information serait probablement plus utile que la dernière heure ou taille de code modifiée pour déterminer quelle version est en cours d'exécution sur votre microcontrôleur et pouvoir récupérer facilement cette version. Je ne suis pas sûr de savoir à quel point je suis fou de faire automatiquement un commit sur chaque téléchargement par vous pourriez toujours les écraser plus tard, une fois le test est finalisé. Si vous n'utilisez pas Git, les mêmes techniques pourraient être adaptées à l'ajout d'autres informations de version que vous aimez et même faire des sauvegardes automatiques du code à cette version.

Comme expliqué par facchinm dans ce thread, les versions récentes de l'IDE Arduino fournissent des raccourcis tout au long du processus de construction que vous pouvez utiliser pour ajouter des actions supplémentaires. Voir:

https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification#pre-and-post-build-hooks-since-ide-165

Le original proposal est de stocker les informations de version dans l'EEPROM. Je crois que la façon la plus courante de le faire est via un fichier .eep. Un problème avec cette idée est que le populaire bootloader Optiboot utilisé par l'Arduino Uno ainsi que les progiciels matériels tiers populaires ne supporte pas l'écriture dans l'EEPROM lors du téléchargement (afin de s'adapter au bootloader dans une section de démarrage de 0.5 ko). Vous devez également éviter les conflits provoqués par l'utilisation des mêmes adresses EEPROM par l'esquisse. Le other thought devait plutôt le stocker dans le code lui-même. Je suppose que cela serait fait en utilisant un crochet pour mettre à jour automatiquement une "bibliothèque" de fichier d'en-tête qui est inclus par l'esquisse. par exemple:

#include <VersionTracker.h> 

Maintenant comment accéder à cette information? Vous pourriez avoir du code dans l'esquisse qui envoie cette information à la demande ou au démarrage. Un exemple simple:

void setup() { 
    Serial.begin(9600); 
    Serial.print(F("Filename: ")); 
    Serial.println(F(__FILE__)); 
    Serial.print(F("Compilation timestamp: ")); 
    Serial.println(F(__DATE__ " " __TIME__)); 
} 

void loop() {} 

Imprime cette information sur le moniteur série au démarrage. Bien sûr, vous pouvez utiliser n'importe quelle autre méthode de communication.Ce genre de chose va ajouter des frais généraux significatifs donc il serait peut-être préférable (si moins amical pour les débutants) de télécharger le firmware du microcontrôleur et ensuite trouver un moyen de trouver les informations de version du démontage.