05) Les fonctions EEPROM.

Pouvoir sauvegarder le programme qui vient d’être saisi en mémoire non volatile semble un complément logique à intégrer dans le démonstrateur P10_Afficher_un_ALGORITHME.ino ainsi que la faculté de pouvoir libérer un emplacement en EEPROM. Du coup, toutes les fonctions du menu EEPROM seront émulées. Par ailleurs, ce démonstrateur intègre la fonction EFFACER du menu PROGRAMME. Aussi, pour terminer ce dernier, il est pertinent d’ajouter également la fonction FORMATER qui effectue un travail très important en langage Turing au bénéfice du programmeur.

Stratégie d’utilisation du codeur rotatif et du clavier.

Chaque fois que le B.P.C. est appuyé, la couleur rouge de la LED triple s’illumine. Tant que l’une des touches du MINI-clavier est cliquée c’est la composante verte qui éclaire. Si appuyer sur le B.P.C. ou l’une des touches du clavier ne provoque pas d’éclairement, c’est que le périphérique n’est pas pris en compte à ce stade de l’utilisation de la machine. Généralement, quand on doit valider l’Item d’un menu, c’est avec le bouton central du codeur rotatif. Par contre, lorsque le programme est en attente d’une touche clavier pour passer à la suite, ou pour confirmer une intention comme sur la Fig.41 la composante verte de la LED tricolore clignote rapidement. L’opérateur sait alors sans ambigüité sur quel dispositif il doit intervenir. Enfin, quand le logiciel attend une valeur, c’est par la rotation du codeur rotatif qu’il faut indiquer la donnée au programme. Par exemple sur la Fig.42 le programme attend la valeur de la Transition à partir de laquelle on désire MODIFIER le programme en cours de saisie. C’est donc le codeur rotatif qu’il faut actionner. Puis, la LED verte étant éteinte, c’est avec le B.P.C. que l’on valide la valeur. Sur la Fig43 le menu EEPROM est en cours d’exploration. Aucune LED n’est allumée, donc c’est le B.P.C. qui déclenchera la suite. On remarque que >>> ÉTENDU <<< avertit l’opérateur que c’est l’algorithme à 20 transitions qui est actuellement en mémoire. Le clic sur le B.P.C. fait passer à l’écran de la Fig.44 et comme le logiciel attend une réponse de type OUI ou NON au clavier, la LED verte clignote rapidement. C’est la touche du haut qui est choisie pour valider, car c’est elle qui engendrera le plus de modification sur l’état de la machine. Toutes les autres touches seront interprétées comme un NON. Si l’on valide à ce stade, on écrase le programme type ÉTENDU actuellement préservé en EEPROM. Comme le perdre par inattention demanderait une réécriture notable, il y a demande de confirmation. Noter au passage qu’effacer le programme ÉTENDU en EEPROM ne présente aucun intérêt. Pour simplifier le logiciel, si on tente une telle action, seulement trois BIPs sonores seront généré.

Un standard personnel.

D’une façon générale, chaque fois qu’un programme fonctionne et qu’il reste au moins une transition disponible, j’ajoute en tête de grille une transition pour pouvoir placer les données à droite de la Tête de L/E et ainsi dégager les pions initiaux pour les avoir bien en vue sur la machine électromécanique quand on déclenche l’exécution avec RUN. Sur la Fig.46 qui représente la zone avant du carrousel, la tête de L/E est symbolisée par le triangle vert. La transition que l’on doit placer en tête de l’algorithme consiste à faire tourner le plateau à gauche tant qu’un état « B » est détecté par la tête de lecture. Dès qu’un « 0 » ou un « 1 » est lu, on saute alors à la suite du programme.
Dans ce but il faut décaler tout le programme d’une transition vers « le bas » pour pouvoir sur la transition n°1 installer les instructions de déplacement de la tête. Le problème, c’est que toutes les instructions de type Trn doivent être incrémentées. C’est tellement rébarbatif à faire que le logiciel de la carte Arduino NANO prévoit la fonction FORMATER dans le menu PROGRAMME pour réaliser cette transposition de façon totalement automatique.
Considérons la Fig.47 qui résume le travail que doit accomplir cette option à notre place. En première action, elle doit déplacer l’ensemble de la « grille de trous » d’une transition vers le bas, à condition toutefois qu’il reste au moins trois lignes de disponibles dans Tr11 ou Tr20 si le mode ÉTENDU est actif. Cette première étape est coloriée en vert pastel sur la Fig.47 montrant le « haut » du listage. Puis, la transition Tr1 est remplacée automatiquement par le code du cadre colorié en rouge. Comme le logiciel ne peut pas savoir si le pion de gauche de la donnée sera un « 1 » ou un « 0« , arbitrairement il y aura saut à Tr2 dans les deux cas et il sera à la charge de l’opérateur de supprimer l’un des deux sauts dans l’algorithme si nécessaire. La Fig.47 est un schéma pour visualiser ce que donnerait la fonction FORMATER si la troisième étape n’avait pas été prévue. Les instructions mises en évidence en bleu programmées dans l’original pointeraient une transition pas assez loin. La dernière étape que doit réaliser le logiciel consiste alors à incrémenter toutes les instructions Trn sauf la première naturellement. Quand avec l’écran de la Fig.48 on clique sur le B.P.C. le démonstrateur demande en Fig.49 confirmation. Car valider va changer les valeurs de toutes les transitions, alors il est souhaitable de ne pas déclencher cette fonction par inadvertance. Si on valide, la première analyse qu’effectue le programme c’est de vérifier qu’il reste au moins une transition de disponible en fin d’algorithme pour pouvoir décaler les instructions « vers le bas ». Si l’intégralité de la grille est occupée, le verdict tombe en Fig.50 accompagné d’un avertissement sonore et a LED verte clignote rapidement.

Lorsque l’opérateur accuse réception sur le petit clavier, il y a retour au MENU de BASE. Si la transposition est possible et que l’on n’est pas en mode Machine Étendue, le programme se contente d’effectuer les traitements décrit ci-avant et l’on revient directement au MENU de BASE. Par rapport au programme de Machine Élémentaire, l’approche a été simplifiée :

Changement de stratégie.

Comprendre la nouvelle structure du programme exige un petit retour en arrière. Sur le programme qui anime la Machine Élémentaire, si l’algorithme est à 20 transitions, il faut au préalable recoder les instructions de type « F« . La valeur de transition 12 symbolise l’instruction de fin d’algorithme dans le cas standard alors que sur la Machine Étendue le code est 21. Pour symboliser « F » maintenant on utilise uniquement 21. Cette optimisation peut sembler anodine, mais elle fait économiser 174 octets de programme ce qui n’est pas du tout négligeable. De plus, le protocole d’utilisation de la machine se simplifie ce qui constitue un bénéfice collatéral tout à fait séduisant. Puisque nous en sommes à l’étude détaillée du logiciel, il me semble opportun d’ouvrir une parenthèse pour compléter les explications relatives à la Fig.39 qui présente l’occupation de la mémoire EEPROM. Pour se repérer dans ce listage mémoire, les débuts de chaque algorithme sont mis en évidences par les encadrement marrons du type . Pour faire le lien avec la Fig.51, le tableau de la Fig.52 présente la traduction des Références Décimales en Hexadécimal.

Dans cette copie d’écran de la Fig.39 les cellules qui contiennent une donnée de type « F » sont mises en évidence par des encadrements rouges . Maintenant que les deux menus EEPROM et PROGRAMME sont entièrement implémentés. Un petit bilan s’impose. La compilation avec la version 1.8.0 de l’IDE indique 14376 octets de programme soit 46% de l’espace mémoire occupé. Quand aux données, elles s’octroient 438 octet et 21% de la RAM dynamique. C’est finalement une bonne nouvelle. On pourrait s’inquiéter de constater que pas très loin de la moitié de la place disponible pour le programme est déjà consommée, alors que les routines qui font fonctionner la machine virtuelle ne sont pas encore installées. Ces dernières ne gloutonnent qu’environ 6000 octets. Ce qui sera le plus boulimique, ce sera les implémentations graphiques du BARILLET. Enfin, les OPTIONS que l’on pourra ajouter seront directement fonction de la place restante. Aussi, il semble judicieux de poursuivre chronologiquement le développement par :

Changer la Référence d’un algorithme.

Intégrer dans le programme de la Machine Élémentaire, cette fonction n’est pas disponible sur la version autonome de la machine virtuelle. Elle encombrerait le menu PROGRAMME d’un item avec page écran supplémentaire pour une action qui à l’usage n’est pas très fréquente. Aussi, pour simplifier les protocoles et gagner une place significative dans le programme on se contentera d’utiliser la procédure suivante : L’algorithme étant chargé, on valide RÉDIGER dans le menu PROGRAMME, on précise la nouvelle Référence et on n’efface pas le programme.

La suite est ici.