23) Le bénéfice d’une programmation optimisée à outrance.

C’est un phénomène bien connu, la richesse pousse l’individu à dilapider. Plus cette dernière est importante, plus l’on gaspille. C’est vrai dans la vie de tous les jours, mais aussi en programmation et ce projet va dans ce domaine montrer un exemple scandaleux !
Figurez-vous que le programme étant achevé et tout ce qui avait été prévu mis en pratique, le bilan listé en tête de programme affichait un encombrement de 22660 Octets (73%) pour le logiciel et à peine 576 Octets (28%) pour les données dynamiques. C’est à dire que l’optimalisation permanente tout au long du développement nous laisse au final un cinquième de la zone de programme non utilisée. C’est inacceptable, car tous les octets ont été facturés … et je suis radin, très radin !
Aussi, je me suis torturé les méninges pour arriver à consommer un maximum de ces cellules de silicium non employée. Vous allez voir que j’ai outrageusement abusé de cette richesse …

Des petites améliorations pas forcément inutiles.

Dilapider notre richesse ne signifie pas forcément « gaspiller ». Avec cet oxymore j’entends que l’on va ajouter du code pour du luxe logiciel, mais ce faisant, ne serait-ce que par principe, tout ajout sera informatiquement optimisé. N’oublions pas que ce didacticiel a pour but annoncé de servir un peu d’exemple pour s’engager dans de la programmation structurée et méthodique. Comme déjà précisé, l’un des plus sûrs moyens de minimiser la taille du code consiste à loger les textes affichés en EEPROM. Hors, la consultation du listage de P19_Demonstrateur_A_pour_V5.ino révèle la présence d’un certain nombre de chaînes de caractères de type « Ech. » par exemple qui semblent contradictoire avec ce principe vertueux. Si vous consultez la Fig.122 qui liste le contenu de l’EEPROM quand on l’initialise, vous constaterez que les textes s’arrêtent exactement en adresse 578 juste avant la zone listée en Hexadécimal qui est réservée à l’historique. (Zones en bleu clair pour les adresses, en jaune pour les textes et en rose pour le début des échantillons.) Conclusion : pour l’occupation de l’EEPROM on arrive à 100% pas une seule cellule n’est au chômage. Difficile de faire lieux. Du coup, quand on a ajouté des fonctions, leurs textes sont sous forme de chaînes de caractères qui occupent la zone mémoire réservée au programme et en même taille celle en RAM des données dynamiques. Parmi les petits ajouts qui ne révolutionnent pas fondamentalement l’usage de cet appareil, l’indicateur analogique virtuel a été modifié pour que les graduations tous les deux secteurs angulaires sont comme sur la Fig.123 mises en évidence par un gros point. Ce petit artifice est bien utile pour la fonction Voltmètre et également pour le mode standard car maintenant l’amplitude de l’affichage du CO2 est amplifiée. Elle va de 0 à 1000 chaque intervalle entre deux graduations valant 100 PPM. Comme avant, tout dépassement de 4,9V engendrera l’affichage de l’avertissement « MAX ?« . Toutefois, la Fig.124 atteste le fait que si durant cette fonction le taux de CO2 dépasse 599 PPM, l’information d’alerte reste prioritaire.

Revenons à l’affichage standard. Si l’on compare la Fig.125 à la Fig.90 de la Page 41, on peut observer une petite différence. En effet, tant que la valeur du CO2 ne déclenche pas une alerte, à l’intérieur de l’indicateur analogique virtuel est précisée, mis en évidence dans l’encadré jaune, la valeur du nombre d’échantillons actuellement disponibles en mémoire EEPROM. On se doute que ce nombre est sauvegardé pour ne pas être perdu sur coupure d’alimentation. C’est la cellule repérée en vert sur la Fig.122 qui préserve cette valeur. . Naturellement cette valeur est remise à zéro si avec la fonction de la Fig.116 Page 52 on valide avec un clic long. Du reste, comme pour toutes les fonctions on revient au fonctionnement de base avec un clic long, arrive forcément un moment où l’on se trompe et l’on efface les données involontairement. Comme ça m’est arrivé trois fois, la mouche m’a piqué et j’ai décidé d’ajouter une sécurité. La solution que présente la Fig.126 est plus simple que d’avoir un autre texte pour OUI/NON affublé d’une nouvelle saisie toujours risquée. Aussi, mis en évidence par la flèche jaune, si on se trompe et que l’on valide l’effacement, pendant une durée qui nous octroie huit secondes de répit, un affichage égrène un compte à rebours avant la catastrophe. Ce délai est largement suffisant pour retirer de la prise secteur l’adaptateur 5Vcc qui alimente la mini-prise USB. OUF ! En revanche, si on désire réellement l’effacement des données, lorsqu’il se produit, l’écran OLED affiche un texte sans ambigüité qui nous informe de l’effectivité de l’opération, que du reste on peut vérifier sur l’affichage de la Fig.125 dans l’encadré jaune. Cet ajout qui gloutonne 310 octet n’est pas du tout inutile et pourra un jour épargner un mois d’enregistrements …

Deux calibres sur l’indicateur analogique de Papi !

Encore un petit plus qui ne bouscule pas la qualité opérationnelle de notre appareil, mais qui peut rendre service quand on mesure des faibles tensions. Le Voltmètre n’est pas plus sensible, et ne présente pas une meilleure définition. Toutefois, chaque clic court sur le B.P. alterne entre un calibre de 5Vcc ou de 1Vcc à pleine échelle sur l’indicateur analogique. Sur la Fig.128 on constate que pour une tension identique, la déviation de l’aiguille virtuelle est cinq fois plus importante que sur la Fig.127. Pour faciliter l’interprétation du cadran, la valeur à pleine échelle est indiquée en permanence comme on peut le constater sur les deux photographies. Bien entendu, le galvanomètre informatique est muni d’une butée mécanique virtuelle bloque l’aiguille à pleine échelle.

La suite est ici.