web-dev-qa-db-fra.com

Pourquoi C domine-t-il sur le marché des logiciels intégrés?

Presque tout le monde va maintenant dire la bénédiction:

performance!

D'accord, C permet d'écrire du code athlétique. Mais il y a d'autres langues qui peuvent le faire, après tout! Et le pouvoir d'optimisation des compilateurs modernes est génial. - C Avant des avantages qu'aucune autre langue n'a? Ou il n'y a tout simplement pas besoin d'instruments plus flexibles dans le domaine?

14
vines

Presque tout le monde va maintenant dire la bénédiction:

performance!

Cela fait partie de cela; L'utilisation déterministe des ressources est importante sur les appareils avec des ressources limitées pour commencer, mais il existe d'autres raisons.

  1. Accès direct aux API matériels de bas niveau.
  2. Vous pouvez trouver un compilateur C pour la grande majorité de ces appareils. Ce n'est pas vrai pour une langue de haut niveau dans mon expérience.
  3. C (le temps d'exécution et votre exécutable généré) est "petit". Vous n'avez pas besoin de charger un tas de choses dans le système pour faire fonctionner le code.
  4. L'API/pilote (s) matériel (s) sera probablement écrit en C ou C++.
41
Ed S.

C a été conçu pour modéliser une CPU, car C a été créé pour rendre UNIX portable à travers des plates-formes au lieu de simplement écrire un langage de montage.

Cela signifie que les programmes C fonctionnent bien en tant que langage de programmation pour les programmes qui doivent avoir un niveau d'abstraction très proche de la CPU réelle, ce qui est le cas pour le matériel intégré.

Remarque: C a été conçu vers 1970 et les CPU étaient plus simples que.

18
user1249

Une des raisons de la domination est qu'elle a le bon type d'outils pour la tâche. Après avoir développé dans des plates-formes intégrées dans les deux Java et C/C++, je peux vous dire que l'approche nue à l'os de C++ est tout simplement naturelle. Sauver le développeur de sentiment qu'il ou elle Sauter à travers des cerceaux parce que la langue est trop élevée, c'est une chose aussi gênante. Un bon exemple est l'absence de variables non signées en Java.

Et les caractéristiques pratiques des langues vm/interprété ne sont généralement pas réalisables et sont laissées hors de la mise en œuvre, par exemple. Collecte des ordures.

11
celebdor

C nécessite un très peu de soutien d'exécution en soi, de sorte que les frais généraux sont beaucoup plus bas. Vous ne dépenserez pas de mémoire ni de stockage sur le support d'exécution, passer du temps/effort pour minimiser ce support ou pour le laisser dans la conception de votre projet.

10
geekosaur

Comme mentionné dans d'autres réponses, c a été développé au début des années 1970 pour remplacer la langue d'assemblage sur une architecture de minicomputateur. À l'époque, ces ordinateurs coûtent généralement des dizaines de milliers de dollars, y compris la mémoire et les périphériques.

De nos jours, vous pouvez obtenir la même puissance informatique ou la même puissance d'ordinateur avec un microcontrôleur intégré de 16 bits qui coûte quatre dollars ou moins en quantités simples, y compris intégré RAM et contrôleurs d'E/S. Un Le microcontrôleur 32 bits coûte peut-être un dollar ou deux autres.

Lorsque je programmment ces petits gars, ce que je fais 90% du temps où je ne concevez pas les planches, j'aime visualiser ce que le processeur va faire. Si je pouvais programmer assez vite dans l'assembleur, je le ferais.

Je ne veux pas toutes sortes de couches d'abstraction. Je débogère souvent en entrant dans une liste de diffusion à l'écran. Il est beaucoup plus facile de le faire lorsque vous avez écrit le programme en C pour commencer.

9
tcrosley

Cela ne domine pas entièrement que C++ est de plus en plus utilisé car les compilateurs sont améliorés et les performances matérielles ont augmenté. Cependant, c est encore très populaire pour quelques raisons;

  1. Large soutien. À peu près, chaque fournisseur de puces fournit un compilateur C et tout exemple de code et de conducteurs sera probablement écrit en c. Les compilateurs C++ sont de plus en plus courants, mais pas un certificat mort pour une puce donnée, et ils sont souvent Bugger. Vous savez également que tout ingénieur intégré sera en mesure de travailler en c. C'est la Lingua Franca de l'industrie.

  2. Performance. Yup, tu l'as dit. La performance est toujours roi et dans un environnement où les routines de base sont toujours souvent écrites dans Assembleur ou au moins optimisées en C en référence à la production de montage, ne sous-estimez jamais l'importance de cela. Les cibles souvent intégrées seront très basses et ont de très petits souvenirs et peu de mips.

  3. Taille. C++ a tendance à être plus grand. Certainement, tout n'utilise que la STL sera plus grande. Généralement à la fois en termes de taille de programme et d'empreinte mémoire.

  4. Conservatisme. C'est une industrie très conservatrice. En partie parce que les coûts de l'échec sont souvent plus élevés et que le débogage est souvent moins accessible, en partie parce qu'il n'a pas besoin de changer. Pour un petit projet intégré C fait bien le travail.

7
Luke Graham

Pour les systèmes embarqués, la grande chose est performance. Mais comme vous l'avez dit, pourquoi c et pas d'autres langues performantes?

Beaucoup de gens ont jusqu'à présent mentionné disponibilité des compilateurs, mais personne n'a été mentionné disponibilité des développeurs. Beaucoup plus de développeurs connaissent déjà C que, disent, ocaml.

Ce sont les trois biggies.