C ++ dans la programmation de logiciels embarqués

Y a-t-il un problème important si j’écris le code pour le système Linux intégré en utilisant la programmation en langage C ++?

En fait, j’ai l’intention de porter du code pour armer Linux, avec le compilateur arm-uclibc.

Merci

Est-ce que vous vous posez des questions sur le C ++ ou le C ++ intégré? Si je comprends bien, le C ++ intégré est pratiquement mort. Vous pouvez programmer en C ++, mais, selon vos besoins, il se peut que vous souhaitiez éviter certaines constructions. Par exemple, si vous n’avez pas beaucoup d’espace, vous pouvez éviter autant que possible les modèles (ou instancier explicitement les modèles) afin de minimiser les instanciations de vos modèles. Vous pouvez également éviter les exceptions ou RTTI pour réduire la quantité d’informations de type générées (pour économiser de l’espace) et éviter d’avoir à gérer la sécurité des exceptions (pour minimiser les pièges potentiels) ainsi que le coût élevé de la propagation des exceptions. (pour raccourcir le chemin d’exécution le plus long, pour les systèmes temps réel). Les fonctions virtuelles devraient être correctes (elles n’introduisent pas trop de frais généraux), mais si vous avez des exigences très ssortingctes, vous devrez peut-être limiter votre utilisation de celles-ci. Si vous utilisez des exceptions, vous devez également vous assurer que le compilateur les prend en charge (car de nombreux compilateurs croisés pour les systèmes intégrés ne le font pas).

En lisant votre question, je pensais à la programmation intégrée traditionnelle jusqu’à ce que je voie la partie Linux. C ++ peut être utilisé dans la programmation intégrée avec des mises en garde concernant les constructeurs cachés, etc. Si vous exécutez Linux, je suppose que vous n’avez pas à vous soucier de cela.

Portage de gros logiciels peut être gênant. J’ai de l’expérience en programmation de microcontrôleur motorolla 8 bits avec gcc c ++, mais dans mon cas, je suis parti de zéro, donc c’était plus facile. Il y a eu peu de problèmes que j’ai rencontrés, comme l’utilisation de destructeurs de programmes arrêtés et le fait de ne pas s’occuper de la stack d’appels provoquerait un débordement par rapport aux autres variables du programme …

Donc, mon conseil pour écrire du code c ++ sur un périphérique embarqué, est de ne pas faire beaucoup de changements à la fois. Lorsque vous programmez par petits incréments, il est plus facile de repérer lorsque quelque chose ne fonctionne plus à cause d’un compilateur ou d’un matériel défectueux.

Je pense que l’utilisation de Linux dans un système embarqué est plus discutable que l’utilisation de C ++. Dans le sens où c’est une décision plus importante que nécessairement une mauvaise idée.

La plupart des problèmes liés au C ++ dans les systèmes embarqués sont liés à la taille et aux performances du code. Beaucoup de préoccupations sont basées sur le mythe ou sont beaucoup moins importantes que vous pourriez le penser, mais même si elles ont une justification, elles deviennent insignifiantes comparées aux frais d’exploitation de Linux et à l’inaptitude du kernel Linux pour le temps réel applications à faible latence.

J’utilise régulièrement C ++ dans les systèmes embarqués sur des systèmes sans OS et basés sur RTOS. L’utilisation de Linux est justifiée lorsque le comportement déterministe en temps réel n’est pas requirejs, mais que le périphérique, le système de fichiers et le support réseau fournis sont utiles (bien que la plupart soient réalisables par d’autres moyens) et que votre système dispose de ressources importantes. mais ce serait toujours la dernière de ma liste de choix pour un système d’exploitation intégré s’il n’y avait pas d’exigence impérative.

Si vous choisissez d’utiliser uClinux sur un ARM sans MMU (un ARM7 ou Cortex-M3 par exemple), vous perdrez une raison convaincante d’utiliser Linux en premier lieu: les processus / kernel protégés par MMU.

Y a-t-il un problème important?

  • Cela dépend de la façon dont vous programmez. Si vous commentez généreusement et que vous organisez bien votre code, alors non, vous n’aurez aucun problème.
  • Cela dépend des capacités de débogage de votre environnement de développement. Si ce n’est pas facile à utiliser, vous aurez des problèmes pour retrouver les bogues.

Si je ne me trompe pas, arm-uclibc est un compilateur C?