J’ai ouvert ce fil car ce matin j’ai passé un bon moment à comprendre ce qui se passait.
Dans le code de mon panneau d’affichage publicitaire (que je présenterai plus tard) j’ai testé plusieurs écrans dont je dispose.
J'utilise la bibliothèque TFT_eSPI qui fonctionne avec un paramétrage externe dans un fichier User_Setup.h : j’avais expliqué ça dans la vidéo du panneau d’affichage en gare et aussi dans le sujet dédié sur le forum.
Donc ce matin, je passe sur les détails, je me suis aperçu que l'IDE Arduino (version 2.30.10) mémorisait, pour chaque sketch, la dernière configuration de carte utilisée (FQBN + options), indexée par le chemin/nom du dossier du sketch. Ce n'est pas un fichier visible dans le dossier du sketch lui-même : c'est stocké dans le cache interne de l'IDE
C:\Users\Administrateur\AppData\Local\arduino\sketches\<HASH>, où <HASH> est calculé à partir du chemin complet du sketch (dossier + nom de fichier) mais pas de son contenu. (l'emplacement sur le disque peut varier selon votre configuration mais c'est la situation lors d'une installation par défaut avec le compte Administrateur)
Chaque nom de dossier de sketch a donc « son historique de réglages » : type de carte, mais aussi et surtout un certain nombre de fichiers compilés sont réutilisés à chaque nouvelle compilation.
On s’en rend compte car la toute première compilation d’un nouveau code est plus longue que les suivantes.
Et donc si on crée ou renomme un sketch avec un nom déjà connu de l'IDE, elle réapplique les réglages associés à ce nom, et qui peuvent être différents des réglages qu’on pense avoir actifs.
Je m’en suis aperçu car la compilation du même code mais l’un avec un nouveau nom (Panneau_Publicitaire_135x240_V1.30.ino) indiquait « Le croquis utilise 369417 octets » et ça fonctionnait, alors que le même code (identique à la virgule près, obtenu par copier/collé) mais avec un ancien nom compilé avec un mauvais User_Setup (Panneau_Publicitaire_135x240_V1.20.ino) indiquait « Le croquis utilise 369589 octets » et ça ne fonctionnait plus
Donc j’ai demandé une sortie détaillée (« verbeuse » dans les préférences ») pour trouver les différences et j’ai trouvé ces lignes qui indiquent clairement que le compilateur réutilise des parties anciennement compilées pour aller plus vite.
Utilisation du fichier déjà compilé: C:\Users\Administrateur\AppData\Local\arduino\sketches\B9ECFD2294AADECFD74B568B31D56789\sketch\Panneau_Publicitaire_135x240_V1.20.ino.cpp.o
Normalement l’IDE détecte les changements de configuration des cartes à condition que ça se fasse dans l’IDE, mais comme là on passe par un fichier externe User_Setup.h, ce n’est pas détecté.
La parade c’est de forcer un rebuild complet en vidant le cache
Il faut d’abord fermer l’IDE
Puis pour trouver le hash, il faut demander la sortie « verbeuse » et rechercher le hash qui revient à chaque ligne.
Ici le hash était B9ECFD2294AADECFD74B568B31D56789
Et on trouve un sous-dossier de ce nom dans C:\Users\Administrateur\AppData\Local\arduino\sketches\
Il faut supprimer le sous-dossier correspondant au hash affiché dans le log de compilation B9ECFD2294AADECFD74B568B31D56789).
Là on relance l’IDE et on peut recompiler proprement.
Pour trouver le hash on peut aussi reclasser la liste des sous-dossiers par date : ce sera le plus récent. Et en ouvrant le dossier \Sketch on voit tout de suite si le nom correspond bien et on efface tout.
Et voilà ... le résultat d'une matinée perdue



