Silvermo -> En systèmes embarqués on va préférer minimiser l'utilisation de fonctions pour plusieurs raisons:
- Utilisation d'espace mémoire data sur la stack due au passage des arguments.
- Utilisation d'espace mémoire programme due au code nécessaire à la sauvegarde/restauration des registres
- Ralentissement encouru qui peut parfois être significatif dans le cadre de routines temps-réel.
Cependant, il y a éventuellement moyen de séparer le code pour la lisibilité et de demander au compilateur de l'inliner. Il faut cependant un compilateur suffisamment flexible (pas toujours le cas en embarqué), être conscient qu'on introduit une dépendance du code par rapport au compilateur, et devoir accepter la présence de nombreux #pragma ou __attribute__ qui peuvent également nuire à la compréhension.
Il y a donc effectivement des cas où on va préférer éviter, quand c'est bien réfléchi. Cela étant dit, il y a tout autant d'arguments à conserver une bonne compartimentation lorsque cela est possible dans le domaine. Je pense essentiellement à la complexité des tests unitaires ou formels, et de façon générale à la réduction des risques d'erreur. Dans le domaine, entre-autres (fortement au pluriel), j'ai par exemple rencontré les règles de codage suivantes:
- Complexité cyclomatique <= 10
- Imbrication du code <= 6
- Fonction de 100 lignes (C) maximum