OVH Cloud OVH Cloud

Du C ou du Java dans les systèmes embarqués automobile ?

246 réponses
Avatar
Zeldus
Bonjour,

Les voitures faisant de plus en plus appel à l'électronique pour
fonctionner, même pour les tâches les plus basiques, en quel langage sont
programmés les applications qui gèrent les différentes fonctions
électroniques intégrés aux voitures ?

J'ai pensé à l'assembleur mais vu la aujourd'hui puissance et le prix des
processeurs même les plus basiques, je pense que ce n'est pas le cas et la
tâche serait complexe pour les programmeurs.

Vient ensuite le C, celui qui serait probablement le plus adapté, ancien
mais toujours très efficace ou alors Java, complètement portable mais qui
nécessite une machine virtuelle assez lourde.

Si vous avez des infos sur le sujet,

Par avance, merci

Pierre

10 réponses

Avatar
Marc Boyer
On 2009-07-02, Zeldus wrote:

"Marc Boyer" a écrit dans le message de
news:

Je n'ai pas de chiffre, mais je peux te parler de ce que je connais,
le constructeur Airbus.
Dans la partie "critique", c'est en général programmé dans un langage
"métier", semi-graphique. Ce langage fait appel à des primitives, codées,
elles en C à la main.
Nous travaillons avec le CEA sur des outils d'analyse statique, donc pour
l'embarqué avion mais potentiellement aussi le nucléaire. Le langage cible
est C. Java n'est pas à ma connaissance sur les écrans radards.




C'est paradoxal, vu la complexité "informatique et électronique" d'un Airbus
de dernière génération (du type A380 par ex), ce doit être un sacré boulot
de coder toutes les primitives en C à la main !



Je ne vois pas en quoi les coder en Java aurait simplifié les choses.

Bien au contraire, c'est là
que j'aurais vu du Java partout, pour la sécurité et la souplesse de
réutilisation sur d'autres avions d'autres génération comme les A340, A330,
A320, etc... Car la quantité de ligne de codes dans un Airbus et une
voiture, ça ne doit pas être comparable...



Tout à fait.

Tu ne vois pas plusieurs choses: un code, c'est une chose de l'écrire,
c'en est une autre de le certifier. Certifier un code Java, c'est certifier
la JVM ou un compilateur java -> ASM ou C.
Le C a un avantage clair, c'est que la tracabilité entre le source et
l'ASM est facile (si on interdit les optimisations au compilateur).
En embarqué, généralement, on a aucun pointeur. Difficile à faire en Java
par exemple.
Etc...

Tu parles de "réutilisation de code" avec Java. Mais soit ta plateforme
d'exécution est la même, et tu récupères du C aussi bien. Soit elle est
différente, et il faut redévelopper et re-certifier ta JVM ou ton
compilo Java. Il peut être moins couteux de redévelopper les
primitives en C.

Je ne dis pas qu'on ne verra *jamais* de Java en embarqué critique.
Ni le contraire d'ailleurs. Je dis juste qu'il y a des contraintes
spécifiques.

Marc Boyer
--
Au XXIème siècle, notre projet de société s'est réduit
à un projet économique...
Avatar
Marc Boyer
On 2009-07-02, JKB wrote:
Le 02-07-2009, ? propos de
Re: Du C ou du Java dans les systèmes embarqués automobile ?,
Zeldus ?crivait dans fr.comp.lang.c :

Java n'est qu'un langage parmi d'autre. On trouve des bugs aussi en C++, en
C, en Objective C, en Delphi et j'en passe. Ce que je vois c'est qu'en
environnement professionnel, Java s'est énormément développé ces dernières
années. Dans mon cas, chez Alcatel Lucent, quand je paramètre un équipement
qui gère le GPRS chez l'opérateur mobile ou je travaille, j'utilise des
applis Java embarquées dans l'équipement et ça marche très bien.

Il faut éviter les généralités, et par ailleurs, dans le cas du site de la
SNCF, rien ne prouve que le problème provient de l'appel Java. Avec l'HTML,
Javascript, Flash, Ajax et j'en passe, c'est devenu un vrai bazar la
conception des sites web.



Le problème, c'est surtout quel'esprit fantassin n'existe plus. Plus
il y a de couches d'abstraction (objet ou autres, je ne suis pas
raciste !) plus il y a de bugs potentiels. J'en ai encore un exemple récent.
La fonction astar de la libbost demande en moyenne 2s pour calculer un
itinéraire sur un département français (et 600 Mo de mémoire,
passons...). En réécrivant le truc en Fortran95, non seulement la
vitesse d'exécution a été multipliée par 7, mais l'occupation mémoire
n'est plus que de 65 Mo ! Bref, Java, C++ et les autres, ce sont
vraiment des usines à gaz. Si encore il n'y avait pas de fuites...



Tu oublies un élément essentiel: le côut de développement.
Actuellement, les ressources CPU/mem ne sont pas chères, alors que
le coût horaire d'un programmeur reste cher.

Là encore, je ne dis pas qu'il faut programmer comme des porcs
et que le matériel suivra. Je dis juste qu'il y a des compromis,
et qu'il faut étudier tous les paramètres, et que les réponses
sont différentes suivant les contextes.

Après, oui, le paysage est devenu plus complexe, et l'espace
des choix aussi.

Dans les années 80, on avait quoi comme choix ? MainFrame vs PC.
Fortran vs C vs BASIC ? En 2009, il y a tellements de choix
à faire à tellement de niveaux...

Marc Boyer
--
Au XXIème siècle, notre projet de société s'est réduit
à un projet économique...
Avatar
Marc Boyer
On 2009-07-02, Erwan David wrote:
"Zeldus" écrivait :

Java avec son allocation dynamique et son GC n'est pas vraiment adapté
au temps réel.



La dernière fois que j'avais regardé Java Temps Réel, ils avaient
du introduire 7 classes de stockage (justement, pour contourner
alloc dynamique et GC). Je ne sais pas où ils en sont.

Par ailleurs la portabilité et la réutilisabilité ça se
fait en C aussi.



Assez bien d'ailleurs. Linux prétends je crois être portable
sur beaucoup de plateforme avec très peu d'ASM. Et si C
n'était pas portable, il ne serait pas autant utilisé.

Marc Boyer
--
Au XXIème siècle, notre projet de société s'est réduit
à un projet économique...
Avatar
JKB
[En-tête "Followup-To:" positionné à fr.comp.lang.c.]
Le 03-07-2009, ? propos de
Re: Du C ou du Java dans les systèmes embarqués automobile ?,
Marc Boyer ?crivait dans fr.comp.lang.c :
On 2009-07-02, JKB wrote:
Le 02-07-2009, ? propos de
Re: Du C ou du Java dans les systèmes embarqués automobile ?,
Zeldus ?crivait dans fr.comp.lang.c :

Java n'est qu'un langage parmi d'autre. On trouve des bugs aussi en C++, en
C, en Objective C, en Delphi et j'en passe. Ce que je vois c'est qu'en
environnement professionnel, Java s'est énormément développé ces dernières
années. Dans mon cas, chez Alcatel Lucent, quand je paramètre un équipement
qui gère le GPRS chez l'opérateur mobile ou je travaille, j'utilise des
applis Java embarquées dans l'équipement et ça marche très bien.

Il faut éviter les généralités, et par ailleurs, dans le cas du site de la
SNCF, rien ne prouve que le problème provient de l'appel Java. Avec l'HTML,
Javascript, Flash, Ajax et j'en passe, c'est devenu un vrai bazar la
conception des sites web.



Le problème, c'est surtout quel'esprit fantassin n'existe plus. Plus
il y a de couches d'abstraction (objet ou autres, je ne suis pas
raciste !) plus il y a de bugs potentiels. J'en ai encore un exemple récent.
La fonction astar de la libbost demande en moyenne 2s pour calculer un
itinéraire sur un département français (et 600 Mo de mémoire,
passons...). En réécrivant le truc en Fortran95, non seulement la
vitesse d'exécution a été multipliée par 7, mais l'occupation mémoire
n'est plus que de 65 Mo ! Bref, Java, C++ et les autres, ce sont
vraiment des usines à gaz. Si encore il n'y avait pas de fuites...



Tu oublies un élément essentiel: le côut de développement.
Actuellement, les ressources CPU/mem ne sont pas chères, alors que
le coût horaire d'un programmeur reste cher.



Le tout est de savoir si on fait du code jetable ou non et quelle
est l'autonomie d'un développement embarqué lorsqu'il tourne sur
batterie. Être obligé d'avoir un processeur puissant, ça se paie aussi
en terme d'autonomie.

Là encore, je ne dis pas qu'il faut programmer comme des porcs
et que le matériel suivra. Je dis juste qu'il y a des compromis,
et qu'il faut étudier tous les paramètres, et que les réponses
sont différentes suivant les contextes.

Après, oui, le paysage est devenu plus complexe, et l'espace
des choix aussi.

Dans les années 80, on avait quoi comme choix ? MainFrame vs PC.
Fortran vs C vs BASIC ? En 2009, il y a tellements de choix
à faire à tellement de niveaux...



Et beaucoup de pertes à tous les niveaux.

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
Marc Boyer
On 2009-07-03, JKB wrote:
[En-tête "Followup-To:" positionné à fr.comp.lang.c.]
Le 03-07-2009, ? propos de
Re: Du C ou du Java dans les systèmes embarqués automobile ?,
Marc Boyer ?crivait dans fr.comp.lang.c :
On 2009-07-02, JKB wrote:
Le 02-07-2009, ? propos de
Re: Du C ou du Java dans les systèmes embarqués automobile ?,
Zeldus ?crivait dans fr.comp.lang.c :

Java n'est qu'un langage parmi d'autre. On trouve des bugs aussi en C++, en
C, en Objective C, en Delphi et j'en passe. Ce que je vois c'est qu'en
environnement professionnel, Java s'est énormément développé ces dernières
années. Dans mon cas, chez Alcatel Lucent, quand je paramètre un équipement
qui gère le GPRS chez l'opérateur mobile ou je travaille, j'utilise des
applis Java embarquées dans l'équipement et ça marche très bien.

Il faut éviter les généralités, et par ailleurs, dans le cas du site de la
SNCF, rien ne prouve que le problème provient de l'appel Java. Avec l'HTML,
Javascript, Flash, Ajax et j'en passe, c'est devenu un vrai bazar la
conception des sites web.



Le problème, c'est surtout quel'esprit fantassin n'existe plus. Plus
il y a de couches d'abstraction (objet ou autres, je ne suis pas
raciste !) plus il y a de bugs potentiels. J'en ai encore un exemple récent.
La fonction astar de la libbost demande en moyenne 2s pour calculer un
itinéraire sur un département français (et 600 Mo de mémoire,
passons...). En réécrivant le truc en Fortran95, non seulement la
vitesse d'exécution a été multipliée par 7, mais l'occupation mémoire
n'est plus que de 65 Mo ! Bref, Java, C++ et les autres, ce sont
vraiment des usines à gaz. Si encore il n'y avait pas de fuites...



Tu oublies un élément essentiel: le côut de développement.
Actuellement, les ressources CPU/mem ne sont pas chères, alors que
le coût horaire d'un programmeur reste cher.



Le tout est de savoir si on fait du code jetable ou non et quelle
est l'autonomie d'un développement embarqué lorsqu'il tourne sur
batterie. Être obligé d'avoir un processeur puissant, ça se paie aussi
en terme d'autonomie.



Tout à fait. Mais ton exemple de calcul d'itinéraire, c'était de
l'embarqué ? Tu répondais à un message qui évoquait HTML, Javascript,
Flax et Ajax... Ca faisait pas très embarqué...

Dans les années 80, on avait quoi comme choix ? MainFrame vs PC.
Fortran vs C vs BASIC ? En 2009, il y a tellements de choix
à faire à tellement de niveaux...



Et beaucoup de pertes à tous les niveaux.



Mais des gains aussi en terme de rapidité de dev. Quand je vois
les feux flash mis en ligne gratos, j'imagine que leur modèle
économique implique quelques mois de developpement, pas plus.
Alors que Tetris ou mégaman sur NES, c'était plutôt en année.

Marc Boyer
--
Au XXIème siècle, notre projet de société s'est réduit
à un projet économique...
Avatar
JKB
Le 03-07-2009, ? propos de
Re: Du C ou du Java dans les systèmes embarqués automobile ?,
Marc Boyer ?crivait dans fr.comp.lang.c :
On 2009-07-03, JKB wrote:
Tu oublies un élément essentiel: le côut de développement.
Actuellement, les ressources CPU/mem ne sont pas chères, alors que
le coût horaire d'un programmeur reste cher.



Le tout est de savoir si on fait du code jetable ou non et quelle
est l'autonomie d'un développement embarqué lorsqu'il tourne sur
batterie. Être obligé d'avoir un processeur puissant, ça se paie aussi
en terme d'autonomie.



Tout à fait. Mais ton exemple de calcul d'itinéraire, c'était de
l'embarqué ? Tu répondais à un message qui évoquait HTML, Javascript,
Flax et Ajax... Ca faisait pas très embarqué...



Il y a des trucs embarqués et d'autres qui ne le sont pas. En
particulier, ces calculs doivent pouvoir tourner dans de l'embarqué.

Dans les années 80, on avait quoi comme choix ? MainFrame vs PC.
Fortran vs C vs BASIC ? En 2009, il y a tellements de choix
à faire à tellement de niveaux...



Et beaucoup de pertes à tous les niveaux.



Mais des gains aussi en terme de rapidité de dev. Quand je vois
les feux flash mis en ligne gratos, j'imagine que leur modèle
économique implique quelques mois de developpement, pas plus.
Alors que Tetris ou mégaman sur NES, c'était plutôt en année.



Ouaips, certainement, mais ces trucs-là sont pour moi du jetable.

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
Erwan David
JKB écrivait :

J'en ai écrit. Il y en a même en Fortran. C'est très bien que tout
soit alloué statiquement. On est _sûr_ que le truc ne va pas échouer
bêtement sur une allocation impossible (par ailleurs, la pluart du
temps, ça tourne dans des systèmes minimaux qui n'ont pas d'allocation
dynamique).



Par ailleurs j'ai écris un allocateur dynamique pour de l'embarqué...


--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
Avatar
Marc Boyer
On 2009-07-03, JKB wrote:
Le 03-07-2009, ? propos de
Re: Du C ou du Java dans les systèmes embarqués automobile ?,
Marc Boyer ?crivait dans fr.comp.lang.c :
On 2009-07-03, JKB wrote:
Tu oublies un élément essentiel: le côut de développement.
Actuellement, les ressources CPU/mem ne sont pas chères, alors que
le coût horaire d'un programmeur reste cher.



Le tout est de savoir si on fait du code jetable ou non et quelle
est l'autonomie d'un développement embarqué lorsqu'il tourne sur
batterie. Être obligé d'avoir un processeur puissant, ça se paie aussi
en terme d'autonomie.



Tout à fait. Mais ton exemple de calcul d'itinéraire, c'était de
l'embarqué ? Tu répondais à un message qui évoquait HTML, Javascript,
Flax et Ajax... Ca faisait pas très embarqué...



Il y a des trucs embarqués et d'autres qui ne le sont pas. En
particulier, ces calculs doivent pouvoir tourner dans de l'embarqué.



Alors en effet, 600Mo d'occupation mémoire en embarqué en 2009,
c'est un peu gros.

Dans les années 80, on avait quoi comme choix ? MainFrame vs PC.
Fortran vs C vs BASIC ? En 2009, il y a tellements de choix
à faire à tellement de niveaux...



Et beaucoup de pertes à tous les niveaux.



Mais des gains aussi en terme de rapidité de dev. Quand je vois
les feux flash mis en ligne gratos, j'imagine que leur modèle
économique implique quelques mois de developpement, pas plus.
Alors que Tetris ou mégaman sur NES, c'était plutôt en année.



Ouaips, certainement, mais ces trucs-là sont pour moi du jetable.



Ce sont des exemples parlant, en effet, pas des preuves.
Mon impression, quand je vois l'évolution dans le temps des services
fournis par les logiciels mis en parallèle avec leurs coûts (pour
les logiciels grands public) c'est que la productivité du développement
a beaucoup progressé. Et je pense que ces frameworks, gros consommateurs
de ressources matérielles il est vrai, y contribuent.

Mais si tu as des chiffres à opposer à mes impresssions, je suis
preneur.

Marc Boyer
--
Au XXIème siècle, notre projet de société s'est réduit
à un projet économique...
Avatar
espie
In article ,
Erwan David wrote:
JKB écrivait :

Le problème, c'est surtout quel'esprit fantassin n'existe plus. Plus
il y a de couches d'abstraction (objet ou autres, je ne suis pas
raciste !) plus il y a de bugs potentiels. J'en ai encore un exemple récent.
La fonction astar de la libbost demande en moyenne 2s pour calculer un
itinéraire sur un département français (et 600 Mo de mémoire,
passons...). En réécrivant le truc en Fortran95, non seulement la
vitesse d'exécution a été multipliée par 7, mais l'occupation mémoire
n'est plus que de 65 Mo ! Bref, Java, C++ et les autres, ce sont
vraiment des usines à gaz. Si encore il n'y avait pas de fuites...



Là c'est plus un problème d'empilement de frameworks que de langage.



Je suis intimement persuade que c'est aussi lie au langage. Pour avoir
abondamment pratique le procedural et l'oriente-objet, l'oriente-objet
n'est plus simple qu'EN APPARENCE. Il est beaucoup plus simple de cacher
de la gestion d'erreur derriere des couches d'abstraction, au point
d'oublier qu'elle existe... et de se retrouver avec des erreurs "mal capturees"
qui ne "fonctionnent" que par chance, avec peu de design global, et une extreme
opacite en cas de debug... c'est pas pour rien si quelqu'un comme Herb Sutter
a passe les quelques dernieres annees a ecrire, ecrire, et ecrire sur la
difficulte de gerer les exceptions (et, plus recemment, sur la difficulte
d'ecrire du code multi-threade qui fonctionne). Des langages tels que C++
(hum...) ou java democratisent terriblement ce genre de chose: d'un coup, le
premier developpeur frais emoulu de son ecole d'inge devient capable de faire
de l'objet, de faire du parallele, et d'ecrire du code multi-threade dans
des framework complexes qui gerent les 9/10 des erreurs pour lui. Tout est
dans l'a peu pres. Passer d'un truc qui marche dans 99% des cas a un truc
fiable a 100%, c'est la qu'est la difficulte. L'extreme facilite du
developpement dans tous ces environnements ne change rien au fait qu'ecrire
du code totalement robuste, c'est difficile... d'ou les multiples et
incroyables plantages du site sncf... ou encore les telephones de derniere
generation qui rebootent ou freezent pour un oui, pour un non.

On est encore tres loin de maitriser ces outils a un niveau de qualite
"suffisant" (les criteres sont bien sur variables). Pour l'instant, ces
technologies sont regulierement deployees dans des contextes ou les criteres
economiques predominent: rapidite du developpement a faible cout, possibilite
de sortir des choses qui marchent plus vite et moins cher que la concurrence,
et qu'importe les quelques bugs, ca va juste faire chier l'utilisateur final,
mais il a deja paye, et le contrat qu'il a du accepter nous met a l'abri des
problemes...
Avatar
JKB
Le 03-07-2009, ? propos de
Re: Du C ou du Java dans les systèmes embarqués automobile ?,
Marc Espie ?crivait dans fr.comp.lang.c :
In article ,
Erwan David wrote:
JKB écrivait :

Le problème, c'est surtout quel'esprit fantassin n'existe plus. Plus
il y a de couches d'abstraction (objet ou autres, je ne suis pas
raciste !) plus il y a de bugs potentiels. J'en ai encore un exemple récent.
La fonction astar de la libbost demande en moyenne 2s pour calculer un
itinéraire sur un département français (et 600 Mo de mémoire,
passons...). En réécrivant le truc en Fortran95, non seulement la
vitesse d'exécution a été multipliée par 7, mais l'occupation mémoire
n'est plus que de 65 Mo ! Bref, Java, C++ et les autres, ce sont
vraiment des usines à gaz. Si encore il n'y avait pas de fuites...



Là c'est plus un problème d'empilement de frameworks que de langage.



Je suis intimement persuade que c'est aussi lie au langage. Pour avoir
abondamment pratique le procedural et l'oriente-objet, l'oriente-objet
n'est plus simple qu'EN APPARENCE. Il est beaucoup plus simple de cacher
de la gestion d'erreur derriere des couches d'abstraction, au point
d'oublier qu'elle existe... et de se retrouver avec des erreurs "mal capturees"
qui ne "fonctionnent" que par chance, avec peu de design global, et une extreme
opacite en cas de debug... c'est pas pour rien si quelqu'un comme Herb Sutter
a passe les quelques dernieres annees a ecrire, ecrire, et ecrire sur la
difficulte de gerer les exceptions (et, plus recemment, sur la difficulte
d'ecrire du code multi-threade qui fonctionne). Des langages tels que C++
(hum...) ou java democratisent terriblement ce genre de chose: d'un coup, le
premier developpeur frais emoulu de son ecole d'inge devient capable de faire
de l'objet, de faire du parallele, et d'ecrire du code multi-threade dans
des framework complexes qui gerent les 9/10 des erreurs pour lui. Tout est
dans l'a peu pres. Passer d'un truc qui marche dans 99% des cas a un truc
fiable a 100%, c'est la qu'est la difficulte. L'extreme facilite du
developpement dans tous ces environnements ne change rien au fait qu'ecrire
du code totalement robuste, c'est difficile... d'ou les multiples et
incroyables plantages du site sncf... ou encore les telephones de derniere
generation qui rebootent ou freezent pour un oui, pour un non.

On est encore tres loin de maitriser ces outils a un niveau de qualite
"suffisant" (les criteres sont bien sur variables). Pour l'instant, ces
technologies sont regulierement deployees dans des contextes ou les criteres
economiques predominent: rapidite du developpement a faible cout, possibilite
de sortir des choses qui marchent plus vite et moins cher que la concurrence,
et qu'importe les quelques bugs, ca va juste faire chier l'utilisateur final,
mais il a deja paye, et le contrat qu'il a du accepter nous met a l'abri des
problemes...



Je plussoie vigoureusement à cette analyse (surtout lorsqu'on voit
le support des threads absolument approximatif des JVM). La libpthread
POSIX est ardue, mais si on ne comprend pas les mécanismes de base, on
ne pourra _jamais_ utiliser de façon fiable un outil de plus haut
niveau. Bref, lorsqu'on est _incapable_ de formaliser quelque chose en
C, en Fortran, en ADA, autrement dit dans un langage fonctionnel ou
impératif, il est _illusoire_ de vouloir sortir un code fonctionnel est
entièrement débuggué avec un langage objet.

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.