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.