Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

1 2 3 4 5
Avatar
zwim
Le Wed, 1 Jul 2009 21:16:46 +0200
Zeldus a écrit
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



L'étage microcontroleurs 8 bits (en particulier tout ce qui est
branché sur le réseau CAN ou KLine) c'est majoritairement du C, tout
simplement parce que le C est plus adapté pour ce type de
programmation quand même très très bas niveau.

Mais il est possible de voir de l'assembleur du Java ou du forth à cet
étage.

Pour l'étage au dessus, le processeur souvent gsm/gps (ARM7 ou ARM9 en
général) c'est soit du C soit du Java selon le fournisseur de chip
(Wavecom ou Telit par exemple) mais il y en a d'autres.

Enfin il peut y avoir encore un étage au dessus, par exemple pour le
système de navigation complet où on peut avoir qqch qui ressemble à un
petit PC, et là les langages de plus haut niveau peuvent apparaitre
(voire un mix).

En fait ça dépend beaucoup des composants et chips choisis pour
fabriquer le hardware.


--
zwim.
Rien n'est impossible que la mesure de la volonté humaine...
Avatar
Samuel Devulder
zwim a écrit :

L'étage microcontroleurs 8 bits (en particulier tout ce qui est
branché sur le réseau CAN ou KLine) c'est majoritairement du C, tout
simplement parce que le C est plus adapté pour ce type de
programmation quand même très très bas niveau.

Mais il est possible de voir de l'assembleur du Java ou du forth à cet
étage.

Pour l'étage au dessus, le processeur souvent gsm/gps (ARM7 ou ARM9 en
général) c'est soit du C soit du Java selon le fournisseur de chip
(Wavecom ou Telit par exemple) mais il y en a d'autres.

Enfin il peut y avoir encore un étage au dessus, par exemple pour le
système de navigation complet où on peut avoir qqch qui ressemble à un
petit PC, et là les langages de plus haut niveau peuvent apparaitre
(voire un mix).

En fait ça dépend beaucoup des composants et chips choisis pour
fabriquer le hardware.





A noter que dans la norme Autosar (le dernier standard de l'architecture
des logiciels dans le domaine automobile http://www.autosar.org), les
langages d'implémentations sont représentée par un enum
(ImplementationProgrammingLanguageEnum pour autosar 21 et
ProgramminglanguageEnum pour autosar3x) qui peut prendre 3 valeurs:
- C
- CPP
- Java
Ce sont donc les langages attendus au niveau des implémentations des
"software components".

Perso j'ai pas encore eu entre les mains du code Java à connecter au RTE
;-) Du reste quand on voit les contraintes mémoire qu'il y a dans
certains softs "pas complètement bas-niveau mais presque" (c'est des
drivers ou des trucs qui tournent dans l'OS temps-réel), java est assez
vite exclu à ces endroits. En fait c'est le C qui domine: on a une bonne
maîtrise du code produit (performance et empreinte mémoire), et en plus
c'est "assez" portable d'un processeur à l'autre.
Avatar
Mickaël Wolff
Zeldus a écrit :
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.



Il y a quelques années je m'étais intéressé au sujet, et j'avais
découvert que les langages de programmation utilisés étaient spécifique
au métier. Dans le même genre que Ladder pour les automates
programmables. Mais je n'en sais pas plus, il faudrait contacter
quelqu'un du métier pour avoir une information pertinente.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Seeking for a position <http://lupusmic.org/pro/>
Avatar
candide
Zeldus a écrit :
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 ?



Question tout à fait intéressante qui permettrait de se donner une idée de
l'importance actuelle du C en informatique industrielle. Ce serait bien surtout
si on pouvait avoir des références et en particulier des références chiffrées.

Mais sinon, dans une voiture actuelle, qu'est-ce qui est gouverné par un
processeur et du logiciel codé dans tel ou tel langage de plus ou moins haut
niveau ? Il y a l'ordinateur de bord (kilométrage, tachymètre, conso, sécurité,
etc), il y sans doute un calculateur pour l'injection, quoi d'autre ?


Bon comme je n'y connais rien, je voudrais savoir, si on considère par exemple
une montre électronique (genre montre-bracelet courante) capable de donner
l'heure, la date, de déclencher une alarme sonore et de faire chrono avec
interruption et fonction lap, est-ce qu'une telle montre contient un
"processeur" ? Je suppose qu'on a dû coder quelque chose mais ça a été codé
comment ? dans un langage (assembleur ou autre) ou c'est juste une circuiterie
hadware ?
Avatar
Zeldus
Il y a de l'électronique partout, même là ou on ne le croit pas.

Une amie s'est vue dans l'impossibilité de démarrer sa Clio (la clé de
contact ne faisait plus rien du tout lorsqu'elle la tournait) et sa voiture
a été immobilisée sans qu'elle comprenne vraiment ce qui se passait. Selon
Renault appelé sur place, ce serait un "bug informatique" qui serait
responsable. Après mise à jour du logiciel dans la voiture (de quoi ??),
tout est rentré dans l'ordre.

Ceci est un exemple parmi d'autres...

Je suis surpris de voir que Java occupe une place visiblement importante
dans les logiciels embarqués dans les voitures.

Pierre
Avatar
Francois
Zeldus a écrit :
Il y a de l'électronique partout, même là ou on ne le croit pas.

Une amie s'est vue dans l'impossibilité de démarrer sa Clio (la clé de
contact ne faisait plus rien du tout lorsqu'elle la tournait) et sa
voiture a été immobilisée sans qu'elle comprenne vraiment ce qui se
passait. Selon Renault appelé sur place, ce serait un "bug informatique"
qui serait responsable. Après mise à jour du logiciel dans la voiture
(de quoi ??), tout est rentré dans l'ordre.



Moyennant finance je suppose ? C'est comme ça qu'ils nous
tiennent les constructeurs et réussissent à nous faire
casquer. :-))


--
François Lafont
Avatar
zwim
Le Thu, 02 Jul 2009 00:29:30 +0200
candide a écrit
Zeldus a écrit :
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 ?



Question tout à fait intéressante qui permettrait de se donner une idée de
l'importance actuelle du C en informatique industrielle. Ce serait bien surtout
si on pouvait avoir des références et en particulier des références chiffrées.

Mais sinon, dans une voiture actuelle, qu'est-ce qui est gouverné par un
processeur et du logiciel codé dans tel ou tel langage de plus ou moins haut
niveau ? Il y a l'ordinateur de bord (kilométrage, tachymètre, conso, sécurité,
etc), il y sans doute un calculateur pour l'injection, quoi d'autre ?




Dans une voiture il y a schématiquement 2 réseaux CAN, l'un à grande
vitesse et l'autre à basse vitesse.

Dans un réseau CAN tout est en série sur le bus, donc pour chaque
périhpérique relié au bus, il faut un microcontroleur pour implémenter
le protocle de communication .

Le réseau rapide (50 ms ou moins) sert surtout au moteur et à tous les
éléments de sécurité (airbag, freins, injection, accéléromètre, wheel
ticks, etc...).

Le réseau lent sert au reste (ouverture des vitres, désuembuage,
radio, etc...).

Sur le réseau CAN circulent donc des datas qui sont réemises de façon
périodique et redondante (comme ça on est sûr de pas les louper).

Et il y a quelque part sur le réseau un processeur qui gère tout ce
petit monde, le "calculateur" comme tu l'appelles.

Les autres réseaux présents servent surtout à communiquer avec
l'extérieur, le réseau KLine c'est l'outil de diagnostic (utilisé par
le mécano quand tu vas au garage), c'est un simple port série avec un
protocole spécifique (d'autres fois c'est de l'uart ou de l'usb).

Le mécano n'est pas un informaticien, il se contente donc de flasher
la dernière version du soft dans la voiture (i.e. dans le processeur
cité plus haut) en espérant que les programmeurs ont fait leur boulot
et que ça va corriger le problème.

Pour moi l'ordinateur de bord et le calculateur peuvent aussi bien
être séparés qu'être sur le même processeur, c'est juste que
l'affichage est déporté au niveau du conducteur.

En fait c'est pas si compliqué, il y a des mesures qui circulent sur
un réseau, et un processeur avec un gros soft dedans qui utilise ces
données pour faire fonctionner la voiture et en même temps offrir des
infos de bord au conducteur.

Bon comme je n'y connais rien, je voudrais savoir, si on considère par exemple
une montre électronique (genre montre-bracelet courante) capable de donner
l'heure, la date, de déclencher une alarme sonore et de faire chrono avec
interruption et fonction lap, est-ce qu'une telle montre contient un
"processeur" ? Je suppose qu'on a dû coder quelque chose mais ça a été codé
comment ? dans un langage (assembleur ou autre) ou c'est juste une circuiterie
hadware ?



La circuiterie hardware, s'occupe de la RTC (la clock) et de
l'affichage lcd, mais les interactions sur les boutons, et les
différents affichages, proviennent forcément d'un programme.

Après la miniaturisation actuelle est telle que un processeur ça peut
être minuscule de nos jours et tu le programmes comme si tu
programmais sur un pc, avec juste quelques limitations en plus.


--
zwim.
Rien n'est impossible que la mesure de la volonté humaine...
Avatar
zwim
Le Thu, 2 Jul 2009 00:42:27 +0200
Zeldus a écrit
Il y a de l'électronique partout, même là ou on ne le croit pas.

Une amie s'est vue dans l'impossibilité de démarrer sa Clio (la clé de
contact ne faisait plus rien du tout lorsqu'elle la tournait) et sa voiture
a été immobilisée sans qu'elle comprenne vraiment ce qui se passait. Selon
Renault appelé sur place, ce serait un "bug informatique" qui serait
responsable. Après mise à jour du logiciel dans la voiture (de quoi ??),
tout est rentré dans l'ordre.

Ceci est un exemple parmi d'autres...

Je suis surpris de voir que Java occupe une place visiblement importante
dans les logiciels embarqués dans les voitures.



Faut pas être surpris.

L'embarqué c'est 90% de temps réel, et qui dit temps réel dit
programmation évènementielle, multitâche, multithread, tout ce que tu
veux.

Or Java offre par défaut une gestion assez sécurisée de tout ça, et
plus facile à mettre en oeuvre qu'en C. Ca n'empêche pourtant pas le C
d'être prépondérant.

D'autre part en "auto" les règles de programmations sont assez
strictes (pas d'allocation dynamique par exemple, c'est la foire à la
variable globale, mais au moins pas de plantage aléatoire dû à ça),
aussi C++ bien qu'utilisable sur un processeur ARM (le plus courant en
embarqué auto) n'a pas la côté.

Pourtant on peut faire du code très propre en C++, mais c'est juste
politique. Reste donc C et Java, C parce que c'est le langage à tout
faire, et Java pour son côté sécurisant.

Après on pourrait avoir bien d'autres langages de programmation, mais
c'est un soucis de commodité, les programmeurs du domaine sont
spécialistes C et Java, pourquoi ajouter un autre langage et faire du
matos incompatible avec le reste et ne pas trouver d'ingénieurs pour
le programmer ?

Pierre



--
zwim.
Rien n'est impossible que la mesure de la volonté humaine...
Avatar
candide
zwim a écrit :

D'autre part en "auto" les règles de programmations sont assez
strictes (pas d'allocation dynamique par exemple, c'est la foire à la
variable globale, mais au moins pas de plantage aléatoire dû à ça),




Donc les programmeurs qui ont entendu dire pendant toute leur formation "les
variables globales vont conduiront en enfer" devront se déconditionner pendant
quelques semaines ...
Avatar
zwim
Le Thu, 02 Jul 2009 01:50:01 +0200
candide a écrit
zwim a écrit :

D'autre part en "auto" les règles de programmations sont assez
strictes (pas d'allocation dynamique par exemple, c'est la foire à la
variable globale, mais au moins pas de plantage aléatoire dû à ça),




Donc les programmeurs qui ont entendu dire pendant toute leur formation "les
variables globales vont conduiront en enfer" devront se déconditionner pendant
quelques semaines ...



Bah oui et non.

Ca reste toujours une mauvaise pratique à mon sens d'en avoir qui
trainent partout, risque de confusion, de collisions de noms,
d'erreurs de link, d'appel sauvage en dehors du contexte, etc...

En revanche, définir une (ou plusieurs, par exemple une pour chaque
tâche) structure globale, mettre les variables dedans et passer un
pointeur sur la structure aux fonctions qui ont besoin des gobales
c'est satisfaisant.

On a les avantages de la programmation contextuelle (*this) et on ne
fait pas d'alloc dynamique comme demandé.

Et si demain, la politique change, y'a qu'à allouer la structure, au
lieu de la laisser bêtement sur la pile.


--
zwim.
Rien n'est impossible que la mesure de la volonté humaine...
1 2 3 4 5