Optimisation à outrance du programme

Économiser des octets dans la mémoire des variables dynamiques.

L’expérience acquise lors du développement du logiciel pour le mini laboratoire avec affichage des données sur la voie série USB nous a montré que le programme proprement dit ne consommait que 62% de l’espace mémoire qui lui est dédié soit moins des deux tiers. Par contre, le compilateur (Dans sa version 1.6.1) nous prévient que les variables globales engloutissent 84% de la RAM dédiée et que des problèmes d’instabilité pourraient en résulter.

INTERPRÉTATION DU MESSAGE D’ALERTE.

Le phénomène de collision entre PILE et mémoires dynamiques constitue un problème potentiel sournois et pas facile à détecter. D’un seul coup le programme diverge et fait n’importe quoi. C’est une « grenade dégoupillée » qui peut exploser à tout moment et vous n’en trouverez pas l’origine dans le programme SOURCE qui peut être bien écrit et sans erreur. De quoi s’agit-t’il ?
Il n’est pas question dans le cadre de ce didacticiel d’étudier en détail l’utilisation de la mémoire RAM et des pointeurs, c’est totalement hors sujet. On se contentera à peine d’effleurer ce thème pour en savoir le juste ce qu’il faut pour comprendre la suite de ce chapitre.

Disposez bien en vue la fiche Organisation de la mémoire vive et surtout parcourez avec ténacité son contenu. Il faut en dégager au moins le concept de PILE. Chaque fois qu’une procédure ou une fonction est invoquée, l’adresse de retour est empilée et le SP pointe deux octets plus bas. Si la procédure inclus des variables locales, ces dernières aussi consomment de la place dans la pile, et le SP continue de descendre. Une interruption peut survenir, et à son tour consommer sa part du gâteau. Exagérer des appels sans retour avec beaucoup de données dynamiques peut finir par une collision entre la PILE et le TAS désigné par HEAP. Brusquement le programme diverge et se comporte de façon aléatoire. C’est d’autant plus vicieux que rien n’en avertit le programmeur.

Rassurez-vous, avec notre logiciel, cette catastrophe ne se produira pas, car les mesures de protection qui s’imposent ont été prises. (Il serait trop laborieux de les détailler toutes dans ce document.)

OPTIMISATION DU PROGRAMME.

Optimiser le choix des données devrait confiner à l’obsession pour tout programmeur, qu’il soit professionnel ou amateur. Les tailles mémoire des P.C. actuels se chiffrent en unités qui il y a quelques années nous étaient totalement inconnues. On parle de GIGA, puis de TERA et rien ne prouve que c’est terminé. Du coup les programmeurs ne se préoccupent plus des contraintes de mémoire et gaspillent à outrance. Cette façon de faire permet de mettre rapidement sur le marché des produits commerciaux, mais conduit à du code exagérément copieux qui enlise le processeur. Bien que fonctionnant à des cadences vertigineuses, finalement ce dernier ne semble pas plus rapide de les bons vieux « pavés d’antan ». Avec les microcontrôleurs nous n’avons pas le choix. On s’en rend compte avec le message :

ATTENTION : Une seule instruction comme Serial.begin(115200); semble bien innocente. C’est à peine une portion de ligne dans le programme source. Et pourtant à elle seule elle consomme 3% de la mémoire de programme soit 1016 octets, et surtout 9% de la mémoire dynamique mise en cause par le message d’alerte recopié ci-dessus. C’est que cette seule instruction amène en mémoire toutes les procédures de la voie série. Conclusion : On oublie définitivement la ligne série USB.

Alerté par l’importance de ménager au mieux la consommation de mémoire dynamique, les nouvelles fonctions propres à la version LCD du logiciel font appel à outrance à la superposition des variables. Moins on déclare de variables, plus on laisse de place disponible en RAM dynamique. L’idée consiste à se servir d’une variable pour des utilisations différentes. Par exemple dans le programme P06_Oscillographe.ino la variable byte MINUTES; va servir pour effectuer les calculs intermédiaires pour tracer sur une ligne graphique. Rien à voir avec des MINUTES, on ne fait que réutiliser l’emplacement disponible pour un traitement particulier.

>>> Page suivante.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *