Fonction digitalWrite/Read vraiment "fast"

Beau déterrage de post.

Bien sur que le plus efficace est d'utiliser les registres.
Je l'avais déjà testé mais ici ce n'était pas mon but quand je me suis "amusé " à écrire ces fonctions.
Car au départ c'était bien un amusement.
Primitivement elles sont destinées à ceux qui veulent rester dans l'ambiance "Wiring/arduino".

La curiosité m'a fait mesurer le temps de "réponse" des fonctions d'écriture ou lecture sur une E/S d'un atmega328p.
J'ai fait le constat que les fonctions digitalXXX prenaient plus de 60 cycles horloges pour les E/S non capables de faire de la PWM et presque 70 pour les E/S capables de faire de la PWM.
Quant aux fonctions digitalFastXXX elles prennent encore une trentaine de cycles horloge alors qu'avec les registres cela variait de 8 à 6 en fonction de la version du compilateur GCC et avr-GCC.
Au final j'ai pu mettre en évidence que la bibliothèque digitalFasrxxx ne traitait pas la principale cause de lenteur des fonctions Wiring (fonctions qu'arduino a copié mot à mot).

Les fonctions digitalFastXXX ne suppriment que les contrôles que j'appelle "anti conneries" comme vérifier que la PWM n'est pas en service avant d'écrire dans l' E/S.
La principale cause de lenteur est la conversion entre les références Atmel et les références Wiring (arduino).
Dans les fonctions proposées cette conversion est, si je me rappelle ce que j'ai fait, à la charge du programmeur.

J'ai aussi fait un autre "amusement " : écrire une classe inspirée des classes Mbed où je faisais la conversion Atmel/Wiring dans le constructeur de la classe.
Cela fonctionnait bien, la rapidité était là et l'usage de la numérotation Wiring/arduino était conservé.
Le défaut est qu'à chaque instanciation d'un objet E/S cela occupait de la mémoire en flash alors qu'avec la solution fonctions l'occupation mémoire ne dépendait pas du nombre de d'E/S concernée.

PS : digitalRead fonctionnait, je ne peux pas exclure que, vu ma tendance assez bordélique, j'ai pu ne pas publier le dernier fichier.
Comme électronicien je n'ai pas un grand niveau en programmation. Il ne devrait pas être trop difficile de corriger les fichiers : il n'y a aucune astuce j'en suis bien incapable.