Une vue alternative: les microcontrôleurs ne manquent pas de mémoire.
Du moins, pas lorsqu'il est correctement programmé. La programmation d'un microcontrôleur n'est pas exactement comme la programmation à usage général, pour le faire correctement, vous devez être conscient de ses contraintes et programmer en conséquence. Il existe des outils pour garantir cela. Recherchez-les et apprenez-les - au moins comment lire les scripts de l'éditeur de liens et les avertissements.
Cependant, comme Majenko et d'autres le disent, un microcontrôleur mal programmé peut manquer de mémoire, puis faire n'importe quoi, y compris une boucle infinie (ce qui donne au moins au chronomètre du chien de garde une chance de le réinitialiser. Vous avez activé le chronomètre du chien de garde, n'est-ce pas? )
Les règles de programmation courantes pour les microcontrôleurs évitent cela: par exemple, toute la mémoire est allouée sur la pile ou allouée statiquement (globalement); "nouveau" ou "malloc" sont interdits. Il en va de même pour la récursivité, de sorte que la profondeur maximale d'imbrication des sous-programmes peut être analysée et montrée pour tenir dans la pile disponible.
Ainsi, le stockage maximum requis peut être calculé lorsque le programme est compilé ou lié, et comparé à la taille de la mémoire (souvent encodée dans le script de l'éditeur de liens) pour le processeur spécifique que vous ciblez.
Le microcontrôleur peut alors ne pas manquer de mémoire, mais votre programme le pourrait. Et dans ce cas, vous arrivez à
- réécrivez-le, plus petit ou
- choisissez un processeur plus grand (ils sont souvent disponibles avec différentes tailles de mémoire).
Un ensemble commun de règles pour la programmation des microcontrôleurs est MISRA-C , adopté par l'industrie automobile.
À mon avis, la meilleure pratique consiste à utiliser le sous - ensemble SPARK-2014 d'Ada. Ada cible en fait raisonnablement bien les petits contrôleurs comme AVR, MSP430 et ARM Cortex, et fournit intrinsèquement un meilleur modèle de programmation de microcontrôleur que C.Mais SPARK ajoute des annotations au programme, sous forme de commentaires, qui décrivent ce que le programme fait.
Désormais, les outils SPARK analyseront le programme, y compris ces annotations, et en prouveront les propriétés (ou signaleront des erreurs potentielles). Vous n'avez pas à perdre de temps ou d'espace de code face aux accès à la mémoire erronés ou aux débordements d'entiers, car il est prouvé qu'ils ne se produisent jamais.
Bien qu'il y ait plus de travail initial impliqué avec SPARK, l'expérience montre qu'il peut arriver à un produit plus rapidement et moins cher parce que vous ne passez pas de temps à courir après des redémarrages mystérieux et d'autres comportements étranges.
Une comparaison de MISRA-C et SPARK