Optimisation
La programmation de bas niveau pour les systèmes embarqués est très différente de la programmation pour les appareils à usage général, tels que les ordinateurs et les téléphones portables. L'efficacité (en termes de vitesse et d'espace) est beaucoup plus importante car les ressources sont précieuses. Cela signifie que la toute première chose à faire si vous manquez d'espace est de regarder quelles parties de votre code vous pouvez optimiser.
En termes de réduction de l'utilisation de l'espace programme (Flash), la taille du code peut être assez difficile à optimiser si vous êtes inexpérimenté ou si vous êtes plus habitué à la programmation pour les ordinateurs de bureau qui n'ont généralement pas besoin de cette compétence. Malheureusement, il n'y a pas d'approche miracle qui fonctionnera dans toutes les situations, bien que cela aide si vous considérez sérieusement ce que votre croquis doit vraiment avoir. Si une fonctionnalité n'est pas nécessaire, retirez-la.
Parfois, il est également utile d'identifier où plusieurs parties de votre code sont identiques (ou très similaires). Vous pourrez peut-être les condenser en fonctions réutilisables qui peuvent être appelées à partir de plusieurs endroits. Cependant, sachez que parfois, essayer de rendre le code trop réutilisable finit par le rendre plus verbeux. C'est un équilibre délicat à frapper qui a tendance à venir avec la pratique. Passer du temps à regarder comment les modifications de code affectent la sortie du compilateur peut aider.
L'optimisation des données d'exécution (SRAM) a tendance à être un peu plus facile lorsque vous y êtes habitué. Un écueil très courant pour les programmeurs débutants utilise trop de données globales. Tout ce qui est déclaré à l'échelle mondiale existera pendant toute la durée de vie du croquis, et ce n'est pas toujours nécessaire. Si une variable n'est utilisée que dans une fonction et qu'elle n'a pas besoin de persister entre les appels, faites-en une variable locale. Si une valeur doit être partagée entre les fonctions, demandez-vous si vous pouvez la passer comme paramètre au lieu de la rendre globale. De cette façon, vous n'utiliserez SRAM pour ces variables que lorsque vous en aurez réellement besoin.
Un autre tueur pour l'utilisation de SRAM est le traitement de texte (par exemple en utilisant la String
classe). De manière générale, vous devez éviter de faire des opérations String si possible. Ce sont des porcs de mémoire massifs. Par exemple, si vous sortez beaucoup de texte en série, utilisez plusieurs appels à Serial.print()
au lieu d'utiliser la concaténation de chaînes. Essayez également de réduire le nombre de littéraux de chaîne dans votre code si possible.
Évitez aussi la récursivité si possible. Chaque fois qu'un appel récursif est effectué, la pile prend un niveau plus profond. Refactorisez vos fonctions récursives pour qu'elles soient itératives à la place.
Utiliser l'EEPROM L'
EEPROM est utilisée pour le stockage à long terme de choses qui ne changent qu'occasionnellement. Si vous devez utiliser de grandes listes ou des tables de recherche de données fixes, envisagez de les stocker à l'avance dans l'EEPROM et de ne retirer ce dont vous avez besoin que si nécessaire.
De toute évidence, l'EEPROM est assez limitée en taille et en vitesse, et a un nombre limité de cycles d'écriture. Ce n'est pas une excellente solution aux limitations de données, mais cela pourrait suffire à alléger le fardeau de Flash ou SRAM. Il est également tout à fait possible de s'interfacer avec un stockage externe similaire, comme une carte SD.
Expansion
Si vous avez épuisé toutes les autres options, l'extension peut être une possibilité. Malheureusement, l'extension de la mémoire Flash pour augmenter l'espace du programme n'est pas possible. Cependant, il est possible d'étendre SRAM. Cela signifie que vous pourrez peut-être refactoriser votre croquis pour réduire la taille du code au détriment de l'augmentation de la taille des données.
Obtenir plus de SRAM est en fait assez simple. Une option consiste à utiliser une ou plusieurs puces 23K256 . Ils sont accessibles via SPI, et il y a la bibliothèque SpiRAM pour vous aider à les utiliser. Attention, ils fonctionnent à 3,3 V et non à 5 V!
Si vous utilisez le Mega, vous pouvez également obtenir des boucliers d'extension SRAM à partir de Lagrangian Point ou de Rugged Circuits .