45 votes

Embedded C ++: utiliser ou non des exceptions?

Je réalise que j'ai peut-être subjectif, il en sera de poser une question concrète, mais tout d'abord, le contexte:

J'ai toujours été un embedded software engineer, mais généralement au niveau de la Couche 3 ou 2 du modèle OSI. Je ne suis pas vraiment un gars du matériel. J'ai en général toujours fait de télécommunications produits, généralement à la main/les téléphones cellulaires, ce qui signifie généralement quelque chose comme un BRAS 7 processeur.

Maintenant, je me retrouve dans une situation plus générique embedded world, dans une petite start-up, où je pourrais le passer à "pas si puissant" processeurs (il y a du subjectif bits) - je ne peut pas prédire.

J'ai lu un peu sur le débat à propos de la gestion des exceptions en C++ dans les systèmes embarqués et il n'y a pas de réponse nette et précise. Il y a quelques petits soucis au sujet de la portabilité et un peu au sujet de l'exécution, mais il semble surtout pour en venir à la taille du code (ou suis-je en lisant le faux débats?).

Maintenant, je dois prendre la décision d'utiliser ou de renoncer à la gestion des exceptions - pour l'ensemble de la société, pour toujours (ça va dans quelques très de base s/w).

Qui peut sonner comme "quelle est la durée d'un morceau de ficelle", mais quelqu'un pourrait répondre "si votre morceau de ficelle est un 8051, alors ne le faites pas. Si, otoh, que, c'est ...".

De quelle manière dois-je sauter? Super-safe & perdre un bon élément, ou exceptionnel du code et peut-être rencontrer des problèmes plus tard?

22voto

John Knoeller Points 20754

En termes de performances, de ma compréhension est que les exceptions en fait de réduire la taille et d'accroître la performance de la normale de chemins d'exécution du code, mais de faire de l'exceptionnel/erreur chemins plus cher. (et souvent beaucoup plus cher).

Donc, si votre seule préoccupation est la performance, je dirais de ne pas s'inquiéter plus tard. Si, aujourd'hui, le CPU de le manipuler, alors l'avenir sera ainsi.

Cependant. À mon avis, les exceptions sont l'une de ces fonctions qui nécessitent des programmeurs pour être plus intelligent de tous les temps que les programmeurs peuvent être raisonnablement attendu. Donc, dis - je- si vous pouvez rester à l'écart de l'exception en fonction du code. Rester à l'écart.

Jetez un oeil à Raymond Chen, plus propre, plus élégante et plus difficile à reconnaître. Dit-il mieux que je le pouvais.

11voto

Le plus grand problème avec les exceptions, ils n'ont pas le temps prévisible d'exécution. Ainsi, ils ne sont pas adaptés pour dur des applications en temps réel (et je suppose que la plupart des applications embarquées ne tombe pas dans cette catégorie).

La seconde est (possible) l'augmentation de binaires de taille.

Je vous propose la lecture du Rapport Technique sur les Performances de C++ , qui traite précisément des sujets qui vous intéressent: à l'aide de C++ embarqué (dur y compris les systèmes temps-réel) et comment la gestion des exceptions sont généralement mis en oeuvre et les coûts additionnels qui il est.

10voto

Michael Kohne Points 8233

Le choix de l'utilisation des exceptions ou pas devrait vraiment mentir à savoir si ils vont tenir à votre programme du domaine du problème bien ou pas.

J'ai utilisé les exceptions C++ largement, à la fois dans la modernisation dans l'ancien code en C, et dans certains code le plus récent. (CONSEIL: Ne pas essayer de le ré-ajustement de 20 ans C code qui a été écrit dans un peu de mémoire de l'environnement avec toutes sortes d'incohérence dans les exceptions. C'est juste un cauchemar).

Si votre problème en est un qui se prête à la manipulation de toutes les erreurs en un seul endroit (par exemple, un serveur TCP/IP en quelque sorte, où chaque condition d'erreur est rencontré "défoncer la connexion et essayez de nouveau"), puis les exceptions sont de bonne vous pouvez simplement jeter une exception n'importe où, et vous savez où et comment elle sera traitée.

Si, d'autre part, votre problème ne se prête pas à la centrale de traitement d'erreur, puis les exceptions sont une douleur ROYALE, parce que essayer de comprendre d'où quelque chose est (ou devrait être) peut facilement devenir un travail de Sisyphe. Et c'est vraiment dur de voir le problème simplement en regardant le code. Au lieu de cela vous avez à regarder à l'appel des arbres pour une fonction donnée et de voir où cette fonction exceptions sont à sa fin, afin de déterminer si vous avez un problème.

4voto

Richard Pennington Points 12912

Je dirais d'utiliser les exceptions de manière appropriée si l'environnement d'exécution les prend en charge. Les exceptions pour gérer des conditions extraordinaires sont correctes et peuvent entraîner peu de frais généraux selon la mise en œuvre. Certains environnements ne les prennent pas en charge, en particulier dans le monde intégré. Si vous les interdisez, veillez à expliquer pourquoi. J'ai eu une fois un gars qui, lorsqu'on lui a dit de ne pas utiliser d'exceptions, a fait une division par zéro à la place. Pas exactement ce que nous avions en tête.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X