Le système d'exploitation Unix a été conçu au début des années 70. Le Langage C a été développé parallèlement à la mise au point de ce système. Sa première standardisation «de fait» a été publiée dans l'ouvrage de B.W. KERNIGHAN et D.M. RITCHIE en 1978.
Même si l'évolution des Langages de programmation C puis C++ est liée à la progression des systèmes Unix, ces langages sont universellement connus et utilisés. On peut pratiquement affirmer qu'il n'existe pas de plate-forme informatique actuelle sur laquelle il n'existe pas une chaîne de développement C/C++.
Le Langage C a été conçu pour de multiples utilisations, il n'offre que des structures de programme permettant l'ordonnancement séquentiel, des tests, des boucles et des sous-programmes. Cet aspect, limité en apparence, garantit la «portabilité» des codes sources écrits en C.
Dans le domaine des systèmes embarqués, le C est le langage de programmation le plus répandu. Il convient parfaitement au développement des pilotes de périphériques spécialisés tels que les convertisseurs analogiques/numériques, les capteurs, etc. Les outils de développement modernes possèdent des fonctions d'optimisation performantes et le recours au langage assembleur est devenu inutile.
Jusqu'à la fin des années 80, la seule méthode de programmation utilisable était procédurale ou structurée. Cette approche consiste à décomposer un problème complexe en un ensemble de tâches ou «procédures» faciles à réaliser. Les données sont alors choisies en fonction des procédures qui vont les manipuler.
En fait, cette méthodologie convient parfaitement aux logiciels écrits par des informaticiens à l'usage des informaticiens.
Curieusement, le développement des outils informatiques à l'usage de non spécialistes a considérablement augmenté la complexité des programmes. Ces logiciels de plus en plus sophistiqués ont amené les concepteurs à changer de démarche. Il est devenu indispensable de penser d'abord aux données et ensuite aux actions que l'on doit réaliser avec.
Un autre aspect très important dans la conception est la réutilisation des développements précédents. Ce principe d'héritage permet de construire des composants logiciels avec des propriétés connues que l'on réutilise suivant ses besoins. De tels composants peuvent même être complétés lors des évolutions des applications.
Si la programmation orientée objet n'est pas largement utilisés dans la mise au point des systèmes embarqués, certains de ses concepts ont été repris avec succès. La surdéfinition et l'héritage se retrouvent très souvent dans les développements d'interfaces spécialisées.
Comme le développement de pilotes de périphériques matériels est une problématique assez éloignée de l'interface utilisateur, le recours à la programmation orientée objet reste très limité dans ce domaine. Le noyau Linux est un exemple caractéristique ; il est entièrement développé en Langage C.
Les évolutions des systèmes d'exploitation basés sur les principes d'Unix et des langages de programmation C/C++ sont associés au développement de l'Internet. Tous ces éléments utilisant un modèle de développement ouvert ont favorisé l'émergence des logiciels libres.
De nombreux concepteurs ont produit des bibliothèques d'objets qu'ils ont rendu libres d'utilisation à l'aide de la General Public License. Cette disponibilité d'outils de très grande qualité a permis à d'autres concepteurs de fournir de nouveaux outils et etc.
Ainsi, avec un minimum de coordination, on trouve aujourd'hui des systèmes d'exploitation, des environnements graphiques, des chaînes de développement et des suites d'applications de plus en plus performantes.
Les principaux outils utilisés dans le présent document sont issus de projets de logiciels libres. La chaîne de développement SDCC - Small Device C Compiler pour microcontrôleurs en est le meilleur exemple. Voir Section 13.3, « C sur MSC1210 : SDCC ».
Vous êtes ici :