Il faut profiter des développements qui ont été déjà réalisés par la communauté et notamment celle d'Arduino qui est très riche. Parce que c'est plus rapide, parce que c'est plus facile et parce qu'ils ont été éprouvés, ajustés, corrigés et sont directement opérationnels.
Pour ma part, je suis parti sur l'IDE Arduino et j'ai commencé par récupérer les librairies de gestion de l'afficheur OLED ainsi que la gestion des cartes SD et des systèmes FAT16/32.
Oui mais, oui mais, le fait est qu'on ne maitrise pas tout
J'ai en effet été confronté à différents problèmes qui m'ont occupés une bonne partie de mon temps.
Le premier et le plus évident, c'est la consommation en mémoire, les librairies sont bien pensées mais elle font, en général, beaucoup que ce dont on a besoin et ça prend de la mémoire. Ayant à priori choisi un ATMega328 la seule intégration des librairies et fonctions de démarrage ont pris 75% de la mémoire programme. Je suis vite arrivé à 100% sans pouvoir être en mesure de lire un seul secteur.
La conséquence : Il m'a fallu réaliser une carte d'adaptation pour un micro contrôleur plus puissant, un ATMega1284. Ce qui m'a permis d'être largement plus confortable.
Le second problème c'est la maitrise du code utilisé dans les librairies. Je me suis aperçu, pour une raison que j'ignore, que la librairie qui gère le système de fichier utilisait les interruptions. Les transferts s'effectuant à cadence du Z80 de l'ordinateur, j'avais périodiquement des enchainements de niveau logiques perturbés par ces sous-routines d'interruption.
J'ai commencé par désactiver les interruptions, mais les cartes SD ne s'initialisaient plus. J'ai donc désactivé les interruptions uniquement durant l'exécution de mes routines échanges critiques. Le résultat n'a pas été probant, car aléatoirement des transferts s'exécutaient mal. Il s'agit d'un à quatre octets sur une transmission d'un secteur de 256 octets. Jamais le même nombre jamais les mêmes octets.
La conséquence : Après être resté un bon mois à tenter de débugger, je me suis asséché, à cours d'idée et j'ai fini par jeter aux oubliettes mon code.
Exit les librairies, exit le C, exit Arduino, je suis donc reparti sur un développement en assembleur avec Atmel studio devenu MicroChip studio.
Je me suis donc documenté et lorsque que j'ai vu la masse de travail devant moi, j'ai décider d'écrire également les routines de gestion de l'afficheur OLED, une goutte d'eau dans la marre.