Pour de nombreux développeurs embarqués, la pile semble être une force assez mystérieuse. Quand des choses étranges commencent à se produire, les ingénieurs sont finalement trompés, et ils commencent à penser que peut-être quelque chose se passe dans la pile. Le résultat est d’ajuster sans réfléchir la taille et la position de la pile, et ainsi de suite. Mais l’erreur est souvent indépendante de la pile, mais comment pouvez-vous être si sûr? Après tout, combien d’ingénieurs ont réellement effectué une analyse de la taille de la cheminée dans le pire des cas?
La taille de la pile est attribuée statiquement au moment de la compilation, mais la pile est utilisée dynamiquement. Lorsque le code s’exécute, les variables, les adresses de retour et les autres informations requises par l’application sont stockées en continu sur la pile. Ce mécanisme fait croître la pile dans la mémoire qu’elle alloue. Cependant, cette croissance peut parfois dépasser les limites de capacité déterminées lors de la compilation, provoquant la corruption des données dans les régions mémoire adjacentes.
Une façon de s’assurer que la pile fonctionne correctement est d’implémenter un moniteur de pile dans le code "d’intégrité" de votre système (combien d’ingénieurs font cela?). Le moniteur de pile crée une zone tampon entre la pile et l’ "autre" zone mémoire et la remplit de motifs de bits connus. Le moniteur surveille alors constamment le modèle pour tout changement. Si le motif des bits change, cela signifie que la pile est devenue trop grande et est sur le point de pousser le système dans l’enfer sombre! À ce stade, le moniteur peut enregistrer la survenue d’événements, l’état du système, et toute autre donnée utile pour un diagnostic ultérieur du problème.
Les moniteurs de pile sont disponibles dans la plupart des systèmes d’exploitation en temps réel (RTOS) ou des systèmes de microcontrôleurs qui implémentent une unité de protection de la mémoire (MPU). La chose effrayante est que ces fonctionnalités sont désactivées par défaut, ou sont souvent désactivées intentionnellement par les développeurs. Une recherche rapide sur le web révèle que beaucoup de gens recommandent d’éteindre le moniteur de pile dans le système d’exploitation en temps réel pour économiser 56 octets d’espace mémoire flash, etc., ce qui ne vaut pas le coût!