IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

C++, embarqué et temps réel : une illusion ou une opportunité ?


Sujet :

Langage C++

  1. #1
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut C++, embarqué et temps réel : une illusion ou une opportunité ?
    [EDIT] Cette discussion fait suite à ce message[/EDIT]

    Citation Envoyé par Emmanuel Deloget Voir le message
    Auquel cas, le C++ n'est peut être pas la solution à utiliser, offrant moins de contrôle sur certains opérations.
    shame on you

    On fait du RT embarqué en C++[*] et ça se passe bien (bon je concède des interruptions en C[**] et l'ordonnanceur C+ASM [***])

    [*] entre 128 et 512ko de code pour des acquisitions à 2kHz (bon, ok on est à 500µs)
    [**] : rien n'empêche de les faire en C++ mais avec une fonction libre ou de classe car aucun objet n'est associé à une IT. Ensuite, il est vrai qu'on évite () des choses comme les exceptions ou du rtti dans les IT principalement pour des pbs de coût temps (une IT ça doit quand même rester assez rapide).

    [***] : COTS donc C. Mais rien n'empêcherait d'avoir une bonne partie en C++. D'ailleurs, l'OS (l'ordonnanceur) est wrappé en classes C++.

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    shame on you

    On fait du RT embarqué en C++[*] et ça se passe bien (bon je concède des interruptions en C[**] et l'ordonnanceur C+ASM [***])

    [*] entre 128 et 512ko de code pour des acquisitions à 2kHz (bon, ok on est à 500µs)
    [**] : rien n'empêche de les faire en C++ mais avec une fonction libre ou de classe car aucun objet n'est associé à une IT. Ensuite, il est vrai qu'on évite () des choses comme les exceptions ou du rtti dans les IT principalement pour des pbs de coût temps (une IT ça doit quand même rester assez rapide).

    [***] : COTS donc C. Mais rien n'empêcherait d'avoir une bonne partie en C++. D'ailleurs, l'OS (l'ordonnanceur) est wrappé en classes C++.
    Enfin, voui, mais avoue quand même que :

    1/ C++ sans RTTI, ni exception, en limitant au max le polymorphisme d'héritage, et de manière générale en limitant tout ce qui fait sa puissance, c'est pas vraiment du C++ - c'est du C with Classes

    2/ la librairie standard n'a pas vraiment été conçue pour être utilisée dans le domaine de l'embarqué. Un exemple typique : les vector. Très simples à utiliser, robustes et tout ce que tu veux. Sauf que dans certains tu es incapable de prévoir quand est-ce qu'un simple ajout d'une valeur dans le vecteur va le redimensionner. Et en TR, ne pas pouvoir prévoir ce genre de choses, ça pose un sacré problème ! (tu va me dire : fait un allocateur ; ben non, parce que l'allocateur n'est pas responsable de la stratégie d'allocation, mais de l'allocation elle même ; quel que soit le sens dans lequel je tourne le problème, je ne vois pas de solution immédiate).

    3/ sous linux, la libstdc++ fait environ 2Mo (strippée). C'est un peu énorme, quand même Certes, l'exe sera de taille correcte, mais la lib est quand même nécessaire. Si tu compiles ton programme en statique, il va faire un sale tête (à moins que tu n'utilises vraiment rien de la lib standard, y compris new/delete).

    M'enfin, j'ai dit "peut-être", et "moins", ce qui atténue ma phrase et la rends globalement cohérente avec ces quelques explications
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Non, non. A part des points bien particulier (comme les ITs), tu peux faire du full C++[*]. Les compilos sont suffisamment performants pour démontrer qu'une utilisation d'exception est beaucoup plus économe en temps et taille qu'avoir toutes les fonctions retournant un code OK/KO qui est systématiquement testé par l'appelant. Idem pour les fonctions virtuelles, l'héritage multiple et virtuel,etc. Et les template, ah les template ! Une fois goûtées difficile de s'en passer (et toujours moins de code bloat qu'avec du copier/coller). Tu as de plus en plus de monde convaincu que faire du full C++ en embarqué ne nuit pas au perf. En réalité, la première cause de code bloat et perfs détériorées se trouve entre la chaise et le clavier (ie : la qualité du code ET l'architecture du soft), pas dans le langage.

    [*] : Ok la STL,c'est dur. Mais les compilateurs proposent des versions embarquées plus ou moins réduites mais qui restent pertinentes (Green Hills propose une STL de 118ko (sans exceptions, doit manquer les locales et quelques features liés aux flux)

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Non, non. A part des points bien particulier (comme les ITs), tu peux faire du full C++[*]. Les compilos sont suffisamment performants pour démontrer qu'une utilisation d'exception est beaucoup plus économe en temps et taille qu'avoir toutes les fonctions retournant un code OK/KO qui est systématiquement testé par l'appelant. Idem pour les fonctions virtuelles, l'héritage multiple et virtuel,etc. Et les template, ah les template ! Une fois goûtées difficile de s'en passer (et toujours moins de code bloat qu'avec du copier/coller). Tu as de plus en plus de monde convaincu que faire du full C++ en embarqué ne nuit pas au perf. En réalité, la première cause de code bloat et perfs détériorées se trouve entre la chaise et le clavier (ie : la qualité du code ET l'architecture du soft), pas dans le langage.
    [*] : Ok la STL,c'est dur. Mais les compilateurs proposent des versions embarquées plus ou moins réduites mais qui restent pertinentes (Green Hills propose une STL de 118ko (sans exceptions, doit manquer les locales et quelques features liés aux flux)
    Ce n'est pas uniquement une question de perf, c'est aussi une question de contrôle du temps perdu. Tous les langages perdent du temps, mais en C++, il est parfois difficile de contrôler ce qui va se passer lorsque tu fais quelque chose (exemple avec new() qui va - ou pas - renvoyer une exception pour une raison ou une autre, ce qui rends les allocations très risquées dans certaines parties du code, sauf à faire du malloc()[*]; et si tu commences à mixer malloc() et new() dans ton code... pas besoin de dessin, hein ? ).

    Que ce soit en pur C++ ou avec Embedded C++, il y a une tonne de détails de ce genre à prendre en compte. Un expert va s'en sortir, mais quelqu'un qui est un peu moins expert a de bonnes chances de se prendre les pieds dans le tapis.

    Mais je suis quand même d'accord avec tout ça. Encore une fois, je ne dis pas que tu ne peux pas ; simplement que je penses que c'est une solution qui doit être vérifiée doublement avant d'être utilisée. Tu me connais, et tu sais que je ne vais pas renier sa versatilité au C++ - pas moi
    [*] un new nothrow ne suffit pas, puisque le constructeur appelé peut générer une exception.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Ce qui me fait soucis, c'est qu'en lisant cela, on puisse conclure : C++, c'est pas pour l'embarqué/TR. Ce qui est faux.

    Les contraintes temporelles sont dans beaucoup de projets limitées à une partie restreinte de l'application, la grande majorité du reste du code n'ayant pas à subir cette contrainte . Ces parties risquées ont déjà des règles de codage C plus dures. Ben, idem en C++. Pour reprendre ton exemple, là où le new va te poser problème, en général, le malloc était déjà interdit (pour des raisons comparables).

    Je n'ai que rarement rencontrer des problèmes à cause du langage/compilateur/OS/HW. Dans 99% des cas, le bug (détection+analyse+correction<3hj) était une 'étourderie' du développeur (même junior, c'est rarement un aspect du langage mal utilisé/compris). Dans 99%s des cas, le bug coriace (détection+analyse+correction>5hj), le bug est un problème d'architecture logiciel.

    Bref, le C++ c'est bon, mangez-en

  6. #6
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Alors je mets en gros :

    Il n'existe pas de contre-indication notable à l'utilisation du C++ sur une plateforme embarquée

    Et je rajoute en petit

    mais il y a quand même quelques subtilités

    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  7. #7
    screetch
    Invité(e)
    Par défaut
    je pense que les mêmes pièges qui touchent l'embarqué touchent aussi les applis plus standards.
    Coder de l'embarqué en C c'est déjà dur, comparer a coder du C pour linux, et la difficulté augmente d'un même ordre de magnitude entre le C++ "normal" et embarqué.

  8. #8
    Membre chevronné

    Inscrit en
    Août 2007
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 300
    Par défaut
    De loin le plus problème du C++ en embarqué, c'est la qualité des compilateurs, et par conséquent l'impossibilité de compter sur l'énorme infrastructure basée sur l'excellente qualité des compilateurs gcc et VC++ (Boost bien sûr, mais aussi d'autres). Le sujet a déjà été abordé, et j'avais participé à la discussion en particulier sur le point des exceptions, mais j'y mentionnais quelques sujets autres que les exceptions et le respect des standards.

    Le résultat est bien résumé par les posts ci-dessus: le C++ en embarqué, ça fait pas comme le C++ sur PC (mais de toute façon, l'embarqué, ça fait pas du tout du tout comme si on était sur PC, l'exemple des vectors m'a fait sourire).

    Mais j'irais plus loin que la simple non contre-indication: le C++ apporte toujours quelque chose dans une équipe travaillant dans l'embarqué. Un programmeur embarqué expérimenté ne sera pas du tout dérouté par les petits problèmes cités ci-dessus, il en mange bien d'autres au ptidéj'.

Discussions similaires

  1. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo