Applications des modèles de programmation

4.4 Applications des modèles de programmation

Objectifs d'apprentissage

À la fin de cette section, vous serez capable de :

  • Discuter de l'avenir de la programmation de bas niveau
  • Comprendre comment le langage C est utilisé pour développer des micrologiciels pour les systèmes embarqués
  • Développer du code de noyau en utilisant le langage de programmation C

Les langages de haut niveau sont populaires et ont leur place, mais il existe certaines applications où seuls les langages de niveau intermédiaire tels que C conviennent. Cette section présente deux de ces applications : le micrologiciel et le développement de noyau (kernel).

L'avenir de la programmation de bas niveau

Les tendances économiques qui diminuent l'intérêt pour la programmation de bas niveau devraient se poursuivre et même s'accélérer. Nous utilisons une plus grande variété de matériel informatique — non seulement des ordinateurs personnels, des appareils mobiles et des serveurs, mais aussi des segments plus étroits tels que les tablettes, les décodeurs, les diffuseurs vidéo et les ordinateurs système sur puce comme le Raspberry Pi (Figure 4.33).

Photo d'un Raspberry Pi 2 (modèle B), montrant un port HDMI, un port audio/vidéo, une entrée d'alimentation Micro USB et deux connecteurs à ruban.
Figure 4.33 Un Raspberry Pi illustre le concept d'un système sur puce. (source : « Raspberry-Pi-2-Bare-BR » par « Evan-Amos »/Wikipedia, Domaine public)

L'IoT est le réseau croissant de produits qui ne sont pas utilisés comme ordinateurs, mais qui contiennent néanmoins un ordinateur connecté à Internet. Les appareils IoT incluent, sans s'y limiter, les enceintes d'assistant vocal intelligentes, les thermostats, les appareils électroménagers, les haut-parleurs et les systèmes de paiement sans contact. L'ordinateur intégré à un appareil IoT est limité en termes de taille, de consommation d'énergie et de coût, il dispose donc généralement d'un CPU lent et d'une petite mémoire. Cela rend les langages de niveau intermédiaire bien adaptés à l'écriture de logiciels IoT ; écrire des applications connectées à Internet en langages de bas niveau est peu pratique, et les langages de haut niveau peuvent ne pas être suffisamment efficaces.

Rust

Rust est un langage de niveau intermédiaire relativement nouveau créé par la Fondation Mozilla dans les années 2010. De nombreuses caractéristiques positives du C se retrouvent également dans Rust : exécution efficace, portabilité (portability), modularité (modularity), programmation procédurale et programmation structurée (structured programming), et récursivité (recursion). Rust a la capacité de manipuler les pointeurs (pointers) mais ajoute des fonctionnalités de sécurité natives afin que le compilateur (compiler) puisse aider le programmeur à prévenir les bogues liés aux pointeurs. Le langage inclut également des fonctionnalités plus courantes dans les langages de haut niveau et indisponibles en C, notamment des types de données (data type) de niveau supérieur, des macros, des modèles et la programmation parallèle (parallel programming). Ces fonctionnalités rendent cependant Rust plus complexe que le C. Puisque Rust possède les mêmes attributs positifs que le C, avec quelques fonctionnalités souhaitables supplémentaires, nous nous attendons à une utilisation croissante de Rust comme langage de niveau intermédiaire.

Enjeux mondiaux en technologie

Nommage des procédures C

C'est une bonne pratique de donner aux procédures des noms descriptifs qui aident un lecteur à comprendre ce que la procédure (procedure) fait. L'anglais a été globalement accepté comme langage de programmation, mais cela peut causer des problèmes dans les pays non anglophones. Par exemple, « open_file » est plus descriptif que « fopen » ; il est également difficile de dire ce que « fopen » pourrait signifier hors contexte et surtout si vous n'êtes pas un anglophone courant. Malheureusement, les noms de procédures en C sont presque toujours écrits en anglais. Comment cette pratique d'utilisation de noms anglais peut-elle affecter les programmeurs en herbe dont la langue maternelle n'est pas l'anglais ? Comment cela rendra-t-il plus difficile pour les programmeurs du monde entier de collaborer sur le code source (source code) ?

Micrologiciel

Le matériel est une machinerie purement physique, et le logiciel est un code purement numérique. Pour combler cet écart, nous avons le micrologiciel (firmware), qui est un code de très bas niveau qui communique directement avec le matériel et fournit une interface pratique pour d'autres logiciels. (« Firm » est le point médian entre « hard » et « soft ».)

Si vous voulez apprendre à être un ingénieur en systèmes embarqués, il serait préférable de commencer par un kit matériel simple, plutôt que de commencer avec le dernier chipset Intel ou ARM. Arduino est une plateforme matérielle destinée à la création de matériel simple et peu coûteux à des fins éducatives ou de loisir. Il existe de nombreuses séries d'Arduinos, mais leur « Arduino PLC Starter Kit » dispose d'un processeur simple et est livré avec un guide. L'Atmega328P possède un cœur (core) 8 bits, ce qui est un bon point de départ pour la conception de circuits numériques et le développement de micrologiciels. Vous n'avez pas besoin de savoir dessiner des schémas et des agencements ni d'assembler les puces. Mais vous devez savoir lire les schémas et comprendre comment les puces sont connectées. Les développeurs de micrologiciels doivent être capables de lire les schémas et de déterminer comment envoyer des données au périphérique cible.

La technologie dans la vie quotidienne

Vous et l'Internet des objets

À mesure que la technologie IoT progresse et que les composants informatiques deviennent moins chers, de plus en plus de catégories d'appareils IoT arrivent sur le marché. Les moniteurs de fitness ont aidé les gens à rester en forme. Les thermostats intelligents ont permis d'économiser de l'énergie et de rendre les maisons plus confortables. D'autres types de domotique ont amélioré la qualité de vie des personnes âgées et des personnes vivant avec un handicap. Ces technologies sont rendues possibles par des langages de niveau intermédiaire qui utilisent efficacement le matériel informatique, tel que le C.

Quelle est une nouvelle catégorie d'appareil IoT qui n'existe pas encore, mais qui améliorerait votre vie, ou la vie de vos proches ? Quel type de logiciel cet appareil nécessiterait-il ? Pourriez-vous l'écrire en C ?

Noyaux de systèmes d'exploitation et pilotes de périphériques

La carte Raspberry Pi est équipée d'un processeur Cortex-A53 qui prend en charge un jeu d'instructions 64 bits. Cela vous permet de découvrir une architecture de processeur moderne avec le rPi. Les informations relatives au Raspberry Pi changent constamment, et la meilleure façon de le comprendre pleinement est de vous attaquer à la création de votre propre noyau (kernel). Voici plusieurs sites web où vous pouvez le faire :

Créer un noyau jouet est un bon moyen de comprendre l'architecture informatique moderne et le contrôle matériel. En fait, vous disposez déjà d'un processeur puissant et de périphériques matériels modernes sur votre ordinateur portable ou de bureau. Cela peut être tout ce dont vous avez besoin pour commencer.

L'émulateur Qemu (https://www.qemu.org/) peut émuler les derniers processeurs ARM et Intel, donc tout ce dont vous avez besoin est déjà à portée de main. Il existe de nombreux noyaux jouets et documents auxquels vous pouvez vous référer. Vous pouvez installer l'émulateur Qemu et créer un petit noyau qui démarre simplement, active la pagination et affiche quelques messages. Vous n'avez pas besoin de créer un système d'exploitation (operating system) complet. Rejoignez la communauté Linux (Linux) et participez au développement.