
Un système embarqué est un système informatique spécialisé (une combinaison d'un processeur , d'une mémoire et de périphériques d'entrée/sortie ) qui a une fonction dédiée au sein d'un système mécanique ou électronique plus vaste . Il est intégré dans un dispositif complet comprenant souvent du matériel électrique ou électronique et des pièces mécaniques. Étant donné qu'un système embarqué contrôle généralement les opérations physiques de la machine dans laquelle il est intégré, il a souvent des contraintes informatiques en temps réel . Les systèmes embarqués contrôlent de nombreux appareils d'usage courant. En 2009 , on estimait que 98 % de tous les microprocesseurs fabriqués étaient utilisés dans des systèmes embarqués.
Les systèmes embarqués modernes sont souvent basés sur des microcontrôleurs (c'est-à-dire des microprocesseurs avec mémoire intégrée et interfaces périphériques), mais les microprocesseurs ordinaires (utilisant des puces externes pour la mémoire et les circuits d'interface périphériques) sont également courants, en particulier dans les systèmes plus complexes. Dans les deux cas, le ou les processeurs utilisés peuvent être de types allant de l'usage général à ceux spécialisés dans une certaine classe de calculs, voire conçus sur mesure pour l'application en question. Une classe standard courante de processeurs dédiés est le processeur de signal numérique (DSP).
Le système embarqué étant dédié à des tâches spécifiques, les ingénieurs concepteurs peuvent l'optimiser pour réduire la taille et le coût du produit et augmenter sa fiabilité et ses performances. Certains systèmes embarqués sont produits en série, bénéficiant ainsi d' économies d'échelle .
Les systèmes embarqués sont de tailles diverses, allant des appareils personnels portables tels que les montres numériques et les lecteurs MP3 aux machines plus grandes comme les appareils électroménagers , les chaînes de montage industrielles , les robots , les véhicules de transport, les contrôleurs de feux de circulation et les systèmes d'imagerie médicale . Ils constituent souvent des sous-systèmes d'autres machines comme l'avionique dans les avions et l'astronique dans les engins spatiaux . Les grandes installations comme les usines , les pipelines et les réseaux électriques reposent sur plusieurs systèmes embarqués mis en réseau. Généralisés par la personnalisation logicielle, les systèmes embarqués tels que les contrôleurs logiques programmables comprennent souvent leurs unités fonctionnelles.
Les systèmes embarqués vont de ceux de faible complexité, avec une seule puce de microcontrôleur, à ceux de très haute complexité avec plusieurs unités, périphériques et réseaux, qui peuvent résider dans des racks d'équipement ou sur de vastes zones géographiques connectées via des lignes de communication longue distance.
Histoire
Arrière-plan
Les origines du microprocesseur et du microcontrôleur remontent au circuit intégré MOS , qui est une puce de circuit intégré fabriquée à partir de MOSFET ( transistors à effet de champ métal-oxyde-semiconducteur ) et a été développée au début des années 1960. En 1964, les puces MOS avaient atteint une densité de transistors plus élevée et des coûts de fabrication inférieurs à ceux des puces bipolaires . Les puces MOS ont encore augmenté en complexité à un rythme prédit par la loi de Moore , conduisant à l'intégration à grande échelle (LSI) avec des centaines de transistors sur une seule puce MOS à la fin des années 1960. L'application des puces MOS LSI à l'informatique a été la base des premiers microprocesseurs, car les ingénieurs ont commencé à reconnaître qu'un système de processeur informatique complet pouvait être contenu sur plusieurs puces MOS LSI.
Les premiers microprocesseurs multipuces, le Four-Phase Systems AL1 en 1969 et le Garrett AiResearch MP944 en 1970, ont été développés avec plusieurs puces MOS LSI. Le premier microprocesseur monopuce était l' Intel 4004 , sorti en 1971. Il a été développé par Federico Faggin , en utilisant sa technologie MOS à grille de silicium , avec les ingénieurs d'Intel Marcian Hoff et Stan Mazor , et l'ingénieur de Busicom Masatoshi Shima .
Développement
L'un des premiers systèmes embarqués modernes et reconnaissables fut l' Apollo Guidance Computer , développé vers 1965 par Charles Stark Draper au MIT Instrumentation Laboratory . Au début du projet, l'ordinateur de guidage Apollo était considéré comme l'élément le plus risqué du projet Apollo car il utilisait les circuits intégrés monolithiques alors nouvellement développés pour réduire la taille et le poids de l'ordinateur.
L'un des premiers systèmes embarqués produits en série fut l' ordinateur de guidage Autonetics D-17 pour le missile Minuteman , sorti en 1961. Lorsque le Minuteman II entra en production en 1966, le D-17 fut remplacé par un nouvel ordinateur qui représentait la première utilisation à haut volume de circuits intégrés.
Depuis ces premières applications dans les années 1960, les systèmes embarqués ont vu leur prix baisser et la puissance de traitement et les fonctionnalités ont considérablement augmenté. Un des premiers microprocesseurs, l' Intel 4004 (sorti en 1971), a été conçu pour les calculatrices et autres petits systèmes, mais nécessitait toujours une mémoire externe et des puces de support. Au début des années 1980, les composants de la mémoire, du système d'entrée et de sortie étaient intégrés dans la même puce que le processeur, formant ainsi un microcontrôleur. Les microcontrôleurs trouvent des applications là où un ordinateur à usage général serait trop coûteux. À mesure que le coût des microprocesseurs et des microcontrôleurs a chuté, la prévalence des systèmes embarqués a augmenté.
Un microcontrôleur relativement peu coûteux peut être programmé pour remplir le même rôle qu'un grand nombre de composants séparés. Avec les microcontrôleurs, il est devenu possible de remplacer, même dans les produits grand public, les composants analogiques coûteux à base de boutons, tels que les potentiomètres et les condensateurs variables , par des boutons ou des boutons haut/bas lus par un microprocesseur. Bien que dans ce contexte, un système intégré soit généralement plus complexe qu'une solution traditionnelle, la majeure partie de la complexité réside dans le microcontrôleur lui-même. Très peu de composants supplémentaires peuvent être nécessaires et la majeure partie de l'effort de conception se situe dans le logiciel. Le prototypage et les tests du logiciel peuvent être plus rapides que la conception et la construction d'un nouveau circuit n'utilisant pas de processeur intégré.
Applications

Les systèmes embarqués sont couramment utilisés dans les applications grand public, industrielles, automobiles , électroménagers , médicales, de télécommunication, commerciales, aérospatiales et militaires.
Les systèmes de télécommunications utilisent de nombreux systèmes embarqués, depuis les commutateurs téléphoniques pour le réseau jusqu'aux téléphones portables de l' utilisateur final . Les réseaux informatiques utilisent des routeurs dédiés et des ponts réseau pour acheminer les données.
Les appareils électroniques grand public comprennent les lecteurs MP3 , les téléviseurs , les téléphones portables , les consoles de jeux vidéo , les appareils photo numériques , les récepteurs GPS et les imprimantes . Les appareils électroménagers, tels que les fours à micro-ondes , les machines à laver et les lave-vaisselle , incluent des systèmes intégrés pour offrir flexibilité, efficacité et fonctionnalités. Les systèmes avancés de chauffage, de ventilation et de climatisation (CVC) utilisent des thermostats en réseau pour contrôler plus précisément et plus efficacement la température qui peut changer selon l'heure de la journée et la saison . La domotique utilise des réseaux filaires et sans fil qui peuvent être utilisés pour contrôler les lumières, la climatisation, la sécurité, l'audio/visuel, la surveillance, etc., qui utilisent tous des dispositifs intégrés pour la détection et le contrôle.
Les systèmes de transport, du vol aux automobiles, utilisent de plus en plus de systèmes embarqués. Les nouveaux avions contiennent des systèmes avioniques avancés tels que des systèmes de guidage inertiel et des récepteurs GPS qui ont également des exigences de sécurité considérables. Les engins spatiaux s'appuient sur des systèmes astronomiques pour la correction de trajectoire. Divers moteurs électriques — moteurs à courant continu sans balais , moteurs à induction et moteurs à courant continu — utilisent des contrôleurs de moteur électroniques . Les automobiles , les véhicules électriques et les véhicules hybrides utilisent de plus en plus de systèmes embarqués pour maximiser l'efficacité et réduire la pollution. D'autres systèmes de sécurité automobile utilisant des systèmes embarqués comprennent le système de freinage antiblocage (ABS), le contrôle électronique de stabilité (ESC/ESP), le contrôle de traction (TCS) et la transmission intégrale automatique .
Les équipements médicaux utilisent des systèmes embarqués pour la surveillance et diverses techniques d'imagerie médicale ( tomographie par émission de positons (TEP), tomodensitométrie à émission monophotonique (SPECT), tomodensitométrie (TDM) et imagerie par résonance magnétique (IRM) pour des inspections internes non invasives. Les systèmes embarqués dans les équipements médicaux sont souvent alimentés par des ordinateurs industriels.
Les systèmes embarqués sont utilisés pour les systèmes critiques en matière de sécurité dans les industries aérospatiales et de défense. À moins d'être connectés à des réseaux câblés ou sans fil via une technologie cellulaire 3G intégrée ou d'autres méthodes à des fins de surveillance et de contrôle de l'IoT, ces systèmes peuvent être isolés du piratage et donc être plus sécurisés. Pour la sécurité incendie, les systèmes peuvent être conçus pour avoir une plus grande capacité à supporter des températures plus élevées et à continuer de fonctionner. En matière de sécurité, les systèmes embarqués peuvent être autonomes et être capables de gérer les coupures de systèmes électriques et de communication.
Les dispositifs sans fil miniatures appelés motes sont des capteurs sans fil en réseau. La mise en réseau de capteurs sans fil utilise la miniaturisation rendue possible par la conception avancée de circuits intégrés (CI) pour coupler des sous-systèmes sans fil complets à des capteurs sophistiqués, permettant aux personnes et aux entreprises de mesurer une myriade de choses dans le monde physique et d'agir sur ces informations via des systèmes de surveillance et de contrôle. Ces motes sont complètement autonomes et fonctionnent généralement sur batterie pendant des années avant que les batteries ne doivent être changées ou chargées.
Caractéristiques
Les systèmes embarqués sont conçus pour effectuer une tâche spécifique, contrairement aux ordinateurs à usage général conçus pour plusieurs tâches. Certains ont des contraintes de performances en temps réel qui doivent être respectées, pour des raisons telles que la sécurité et la facilité d'utilisation ; d'autres peuvent avoir des exigences de performances faibles ou nulles, ce qui permet de simplifier le matériel du système pour réduire les coûts.
Les systèmes embarqués ne sont pas toujours des appareils autonomes. De nombreux systèmes embarqués sont une petite partie d'un appareil plus grand qui remplit une fonction plus générale. Par exemple, la guitare robot Gibson est dotée d'un système embarqué pour accorder les cordes, mais l'objectif général de la guitare robot est de jouer de la musique. De même, un système embarqué dans une automobile fournit une fonction spécifique en tant que sous-système de la voiture elle-même.

Les instructions de programme écrites pour les systèmes embarqués sont appelées microprogrammes et sont stockées dans des mémoires mortes ou des puces de mémoire flash . Elles fonctionnent avec des ressources matérielles informatiques limitées : peu de mémoire, clavier ou écran petit ou inexistant.
Interfaces utilisateur

Les systèmes embarqués vont de l'absence totale d'interface utilisateur , dans des systèmes dédiés à une seule tâche, à des interfaces utilisateur graphiques complexes qui ressemblent aux systèmes d'exploitation de bureau d'ordinateurs modernes. Les appareils embarqués simples utilisent des boutons , des diodes électroluminescentes (DEL), des écrans à cristaux liquides (LCD) graphiques ou à caractères avec un système de menu simple . Les appareils plus sophistiqués qui utilisent un écran graphique avec détection tactile ou des touches programmables sur le bord de l'écran offrent une flexibilité tout en minimisant l'espace utilisé : la signification des boutons peut changer avec l'écran et la sélection implique le comportement naturel de pointer vers ce qui est souhaité.
Certains systèmes fournissent une interface utilisateur à distance à l'aide d'une connexion série (par exemple RS-232 ) ou réseau (par exemple Ethernet ). Cette approche étend les capacités du système embarqué, évite le coût d'un écran, simplifie le package de support de la carte (BSP) et permet aux concepteurs de créer une interface utilisateur riche sur le PC. Un bon exemple de cela est la combinaison d'un serveur HTTP intégré exécuté sur un périphérique embarqué (tel qu'une caméra IP ou un routeur réseau ). L'interface utilisateur s'affiche dans un navigateur Web sur un PC connecté au périphérique.
Processeurs dans les systèmes embarqués
Les ordinateurs embarqués classiques se distinguent par leur faible consommation d'énergie, leur petite taille, leur plage de fonctionnement robuste et leur faible coût unitaire, mais au détriment des ressources de traitement limitées.
De nombreux microcontrôleurs ont été développés pour être utilisés dans des systèmes embarqués. Des microprocesseurs à usage général sont également utilisés dans les systèmes embarqués, mais nécessitent généralement davantage de circuits de support que les microcontrôleurs.
Cartes informatiques prêtes à l'emploi
PC/104 et PC/104+ sont des exemples de normes pour les cartes informatiques prêtes à l'emploi destinées aux petits systèmes embarqués et robustes à faible volume. Elles sont pour la plupart basées sur x86 et souvent physiquement petites par rapport à un PC standard, bien qu'elles restent assez grandes par rapport à la plupart des systèmes embarqués simples (8/16 bits). Elles peuvent utiliser DOS , FreeBSD , Linux , NetBSD , OpenHarmony ou un système d'exploitation temps réel embarqué (RTOS) tel que MicroC/OS-II , QNX ou VxWorks .
Dans certaines applications, où la petite taille ou l'efficacité énergétique ne sont pas des préoccupations majeures, les composants utilisés peuvent être compatibles avec ceux utilisés dans les ordinateurs personnels x86 à usage général. Des cartes telles que la gamme VIA EPIA contribuent à combler cette lacune en étant compatibles avec les PC mais hautement intégrées, physiquement plus petites ou dotées d'autres attributs qui les rendent attrayantes pour les ingénieurs en intégration. L'avantage de cette approche est que des composants de base à faible coût peuvent être utilisés avec les mêmes outils de développement logiciel que ceux utilisés pour le développement logiciel général. Les systèmes construits de cette manière sont toujours considérés comme intégrés car ils sont intégrés dans des appareils plus grands et remplissent un rôle unique. Les exemples d'appareils qui peuvent adopter cette approche sont les distributeurs automatiques de billets (DAB) et les machines d'arcade , qui contiennent du code spécifique à l'application.
Cependant, la plupart des cartes de systèmes embarqués prêtes à l'emploi ne sont pas centrées sur le PC et n'utilisent pas les bus ISA ou PCI . Lorsqu'un processeur sur puce est impliqué, il peut y avoir peu d'intérêt à disposer d'un bus standardisé reliant des composants discrets, et l'environnement pour les outils matériels et logiciels peut être très différent.
Un style de conception courant utilise un petit module système, peut-être de la taille d'une carte de visite, contenant des puces BGA haute densité telles qu'un processeur et des périphériques système sur puce basés sur ARM , une mémoire flash externe pour le stockage et une mémoire DRAM pour l'exécution. Le fournisseur du module fournira généralement un logiciel de démarrage et s'assurera qu'il existe une sélection de systèmes d'exploitation, comprenant généralement Linux et certains choix en temps réel. Ces modules peuvent être fabriqués en grande quantité, par des organisations familiarisées avec leurs problèmes de test spécialisés, et combinés avec des cartes mères personnalisées à volume beaucoup plus faible avec des périphériques externes spécifiques à l'application. Les exemples marquants de cette approche incluent Arduino et Raspberry Pi .
Solutions SoC ASIC et FPGA
Un système sur puce (SoC) contient un système complet, composé de plusieurs processeurs, multiplicateurs, caches, voire de différents types de mémoire et généralement de divers périphériques tels que des interfaces pour la communication filaire ou sans fil sur une seule puce. Souvent, des unités de traitement graphique (GPU) et des DSP sont inclus dans ces puces. Les SoC peuvent être implémentés sous forme de circuit intégré spécifique à une application (ASIC) ou à l'aide d'un réseau de portes programmables sur site (FPGA) qui peut généralement être reconfiguré.
Les implémentations ASIC sont courantes pour les systèmes embarqués à très haut volume comme les téléphones mobiles et les smartphones . Les implémentations ASIC ou FPGA peuvent être utilisées pour les systèmes embarqués à volume moins élevé avec des besoins particuliers en termes de performances de traitement du signal, d'interfaces et de fiabilité, comme dans l'avionique.
Périphériques

Les systèmes embarqués communiquent avec le monde extérieur via des périphériques , tels que :
- Interfaces de communication série (SCI) : RS-232 , RS-422 , RS-485 , etc.
- Interface série synchrone : I2C , SPI , SSC et ESSI (interface série synchrone améliorée)
- Bus série universel (USB)
- Cartes multimédias ( cartes SD , CompactFlash , etc.)
- Contrôleur d'interface réseau : Ethernet , WiFi , etc.
- Bus de terrain : bus CAN , LIN-Bus , PROFIBUS , etc.
- Minuteries : boucles à verrouillage de phase , minuteries à intervalles programmables
- Entrée/sortie à usage général (GPIO)
- Convertisseurs analogique-numérique et numérique-analogique
- Débogage : JTAG , programmation dans le système , port d'interface en mode de débogage en arrière-plan , ports BITP et DB9.
Outils
Comme pour d'autres logiciels, les concepteurs de systèmes embarqués utilisent des compilateurs , des assembleurs et des débogueurs pour développer des logiciels de systèmes embarqués. Cependant, ils peuvent également utiliser des outils plus spécifiques :
- Dans les débogueurs de circuits ou les émulateurs (voir la section suivante).
- Utilitaires permettant d'ajouter une somme de contrôle ou un CRC à un programme, afin que le système embarqué puisse vérifier si le programme est valide.
- Pour les systèmes utilisant le traitement du signal numérique , les développeurs peuvent utiliser un bloc-notes de calcul pour simuler les mathématiques.
- Les outils de modélisation et de simulation au niveau système aident les concepteurs à construire des modèles de simulation d'un système avec des composants matériels tels que des processeurs, des mémoires , des DMA , des interfaces , des bus et des flux de comportement logiciel sous forme de diagramme d'état ou de diagramme de flux à l'aide de blocs de bibliothèque configurables. La simulation est effectuée pour sélectionner les bons composants en effectuant des compromis entre puissance et performances, une analyse de fiabilité et une analyse des goulots d'étranglement. Les rapports typiques qui aident un concepteur à prendre des décisions d'architecture incluent la latence des applications, le débit des appareils, l'utilisation des appareils, la consommation électrique de l'ensemble du système ainsi que la consommation électrique au niveau des appareils.
- Un outil de développement basé sur un modèle crée et simule des diagrammes de flux de données graphiques et des diagrammes d'état UML de composants tels que des filtres numériques, des contrôleurs de moteur, le décodage de protocoles de communication et des tâches multi-débits.
- Des compilateurs et des éditeurs de liens personnalisés peuvent être utilisés pour optimiser le matériel spécialisé.
- Un système embarqué peut avoir son propre langage spécial ou outil de conception, ou ajouter des améliorations à un langage existant tel que Forth ou Basic .
- Une autre alternative est d'ajouter un RTOS ou un système d'exploitation embarqué
- Outils de modélisation et de génération de code souvent basés sur des machines à états
Les outils logiciels peuvent provenir de plusieurs sources :
- Sociétés de logiciels spécialisées dans le marché embarqué
- Porté à partir des outils de développement de logiciels GNU
- Parfois, des outils de développement pour un ordinateur personnel peuvent être utilisés si le processeur intégré est un proche parent d'un processeur PC commun
À mesure que la complexité des systèmes embarqués augmente, des outils et des systèmes d'exploitation de plus haut niveau migrent vers des machines où cela a du sens. Par exemple, les téléphones portables , les assistants numériques personnels et autres ordinateurs grand public nécessitent souvent des logiciels importants qui sont achetés ou fournis par une personne autre que le fabricant de l'électronique. Dans ces systèmes, un environnement de programmation ouvert tel que Linux , NetBSD , FreeBSD , OSGi ou Embedded Java est nécessaire pour que le fournisseur de logiciels tiers puisse vendre à un large marché.
Débogage
Le débogage intégré peut être effectué à différents niveaux, en fonction des fonctionnalités disponibles. Les éléments à prendre en compte sont les suivants : ralentit-il l'application principale ? À quelle distance se trouve le système ou l'application débogués du système ou de l'application réels ? À quel point les déclencheurs qui peuvent être définis pour le débogage sont-ils expressifs (par exemple, l'inspection de la mémoire lorsqu'une valeur de compteur de programme particulière est atteinte) ? et ce qui peut être inspecté dans le processus de débogage (par exemple, uniquement la mémoire, ou la mémoire et les registres, etc.).
Des techniques et systèmes de débogage les plus simples aux plus sophistiqués, ils sont regroupés dans les domaines suivants :
- Débogage résident interactif, utilisant le shell simple fourni par le système d'exploitation intégré (par exemple Forth et Basic)
- Les débogueurs purement logiciels ont l'avantage de ne nécessiter aucune modification matérielle mais doivent contrôler soigneusement ce qu'ils enregistrent afin de conserver du temps et de l'espace de stockage.
- Débogage externe utilisant la journalisation ou la sortie du port série pour tracer l'opération à l'aide d'un moniteur en flash ou d'un serveur de débogage comme le débogueur Remedy qui fonctionne même pour les systèmes multicœurs hétérogènes .
- Un débogueur en circuit (ICD), un périphérique matériel qui se connecte au microprocesseur via une interface JTAG ou Nexus . Cela permet de contrôler le fonctionnement du microprocesseur en externe, mais est généralement limité à des capacités de débogage spécifiques du processeur.
- Un émulateur en circuit (ICE) remplace le microprocesseur par un équivalent simulé, offrant un contrôle total sur tous les aspects du microprocesseur.
- Un émulateur complet fournit une simulation de tous les aspects du matériel, ce qui permet de le contrôler et de le modifier dans son intégralité, et de procéder au débogage sur un PC normal. Les inconvénients sont le coût et la lenteur du fonctionnement, dans certains cas jusqu'à 100 fois plus lent que le système final.
- Pour les conceptions SoC, l'approche typique consiste à vérifier et déboguer la conception sur une carte prototype FPGA. Des outils tels que Certus sont utilisés pour insérer des sondes dans l'implémentation FPGA qui rendent les signaux disponibles pour l'observation. Cela permet de déboguer les interactions matérielles, logicielles et micrologicielles sur plusieurs FPGA dans une implémentation avec des capacités similaires à celles d'un analyseur logique.
À moins d'être limité au débogage externe, le programmeur peut généralement charger et exécuter des logiciels via les outils, visualiser le code exécuté dans le processeur et démarrer ou arrêter son fonctionnement. La vue du code peut être sous forme de langage de programmation de haut niveau , de code assembleur ou d'un mélange des deux.
Tracé
Les systèmes d'exploitation en temps réel prennent souvent en charge le suivi des événements du système d'exploitation. Une vue graphique est présentée par un outil PC hôte, basée sur un enregistrement du comportement du système. L'enregistrement de suivi peut être effectué dans un logiciel, par le RTOS ou par un matériel de suivi spécial. Le suivi RTOS permet aux développeurs de comprendre les problèmes de synchronisation et de performances du système logiciel et donne une bonne compréhension des comportements système de haut niveau. L'enregistrement de suivi dans les systèmes embarqués peut être réalisé à l'aide de solutions matérielles ou logicielles. L'enregistrement de suivi basé sur un logiciel ne nécessite pas de matériel de débogage spécialisé et peut être utilisé pour enregistrer des suivis dans les périphériques déployés, mais il peut avoir un impact sur l'utilisation du processeur et de la RAM. macros vides qui sont invoquées par le système d'exploitation à des endroits stratégiques du code et peuvent être implémentées pour servir de crochets .
Fiabilité
Les systèmes embarqués sont souvent installés dans des machines qui sont censées fonctionner en continu pendant des années sans erreur et, dans certains cas, se rétablir d'elles-mêmes en cas d'erreur. Par conséquent, le logiciel est généralement développé et testé avec plus de soin que celui des ordinateurs personnels et les pièces mécaniques mobiles peu fiables telles que les lecteurs de disque, les commutateurs ou les boutons sont évitées.
Les problèmes de fiabilité spécifiques peuvent inclure :
- Le système ne peut pas être arrêté en toute sécurité pour être réparé ou il est trop inaccessible pour être réparé. On peut citer comme exemples les systèmes spatiaux, les câbles sous-marins, les balises de navigation, les systèmes de forage et les automobiles.
- Pour des raisons de sécurité, le système doit être maintenu en fonctionnement. Une fonctionnalité réduite en cas de panne peut être intolérable. Souvent, un opérateur sélectionne des solutions de secours. On peut citer comme exemples la navigation aérienne, les systèmes de contrôle des réacteurs, les commandes critiques pour la sécurité des usines chimiques ou les signaux ferroviaires.
- Le système perdra d'importantes sommes d'argent en cas d'arrêt : commutateurs téléphoniques, commandes d'usine, commandes de ponts et d'ascenseurs, transfert de fonds et tenue de marché, ventes et services automatisés.
Diverses techniques sont utilisées, parfois en combinaison, pour récupérer des erreurs, qu'il s'agisse de bugs logiciels tels que des fuites de mémoire ou d'erreurs logicielles dans le matériel :
- temporisateur de surveillance qui réinitialise et redémarre le système à moins que le logiciel n'informe périodiquement les sous-systèmes de surveillance
- La conception avec une architecture de base de calcul fiable (TCB) garantit un environnement système hautement sécurisé et fiable
- Un hyperviseur conçu pour les systèmes embarqués est capable de fournir une encapsulation sécurisée pour tout composant de sous-système afin qu'un composant logiciel compromis ne puisse pas interférer avec d'autres sous-systèmes ou un logiciel système de niveau privilégié. Cette encapsulation empêche les pannes de se propager d'un sous-système à un autre, améliorant ainsi la fiabilité. Cela peut également permettre à un sous-système d'être automatiquement arrêté et redémarré en cas de détection d'une panne.
- La programmation tenant compte de l'immunité peut aider les ingénieurs à produire un code de systèmes embarqués plus fiable. Les directives et les règles de codage telles que MISRA C/C++ visent à aider les développeurs à produire des micrologiciels fiables et portables de différentes manières : généralement en conseillant ou en interdisant les pratiques de codage qui peuvent conduire à des erreurs d'exécution (fuites de mémoire, utilisations de pointeurs non valides), l'utilisation de contrôles d'exécution et la gestion des exceptions (vérifications de plage/santé, contrôles de validité de l'index de division par zéro et de tampon, cas par défaut dans les contrôles logiques), la limitation de boucle, la production de code lisible par l'homme, bien commenté et bien structuré, et en évitant les ambiguïtés de langage qui peuvent conduire à des incohérences ou des effets secondaires induits par le compilateur (ordre d'évaluation des expressions, récursivité, certains types de macro). Ces règles peuvent souvent être utilisées en conjonction avec des vérificateurs statiques de code ou une vérification de modèle délimitée à des fins de vérification fonctionnelle, et aident également à déterminer les propriétés de synchronisation du code .
Volume élevé ou faible
Pour les systèmes à haut volume tels que les téléphones portables , la minimisation des coûts est généralement la principale préoccupation lors de la conception. Les ingénieurs sélectionnent généralement du matériel suffisamment performant pour implémenter les fonctions nécessaires.
Pour les systèmes embarqués à faible volume ou prototypes, les ordinateurs à usage général peuvent être adaptés en limitant les programmes ou en remplaçant le système d'exploitation par un RTOS.
Architectures logicielles embarquées
En 1978, la National Electrical Manufacturers Association a publié l'ICS 3-1978, une norme pour les microcontrôleurs programmables, incluant presque tous les contrôleurs informatiques, tels que les ordinateurs monocarte , les contrôleurs numériques et les contrôleurs basés sur des événements.
Il existe plusieurs types différents d’architecture logicielle couramment utilisés.
Boucle de contrôle simple
Dans cette conception, le logiciel dispose simplement d'une boucle qui surveille les périphériques d'entrée. La boucle appelle des sous-routines , chacune gérant une partie du matériel ou du logiciel. C'est pourquoi on parle de boucle de contrôle simple ou d'entrée-sortie programmée.
Système contrôlé par interruption
Certains systèmes embarqués sont principalement contrôlés par des interruptions . Cela signifie que les tâches exécutées par le système sont déclenchées par différents types d'événements ; une interruption peut être générée, par exemple, par un temporisateur à un intervalle prédéfini ou par un contrôleur de port série recevant des données.
Cette architecture est utilisée si les gestionnaires d'événements nécessitent une faible latence et si les gestionnaires d'événements sont courts et simples. Ces systèmes exécutent également une tâche simple dans une boucle principale, mais cette tâche n'est pas très sensible aux retards inattendus. Parfois, le gestionnaire d'interruption ajoute des tâches plus longues à une structure de file d'attente. Plus tard, une fois le gestionnaire d'interruption terminé, ces tâches sont exécutées par la boucle principale. Cette méthode rapproche le système d'un noyau multitâche avec des processus discrets.
Multitâche coopératif
Le multitâche coopératif est très similaire au schéma de boucle de contrôle simple, sauf que la boucle est cachée dans une API . Le programmeur définit une série de tâches, et chaque tâche dispose de son propre environnement d'exécution. Lorsqu'une tâche est inactive, elle appelle une routine d'inactivité qui passe le contrôle à une autre tâche.
Les avantages et les inconvénients sont similaires à ceux de la boucle de contrôle, sauf que l'ajout de nouveaux logiciels est plus facile, en écrivant simplement une nouvelle tâche ou en l'ajoutant à la file d'attente.
Multitâche préemptif ou multithreading
Dans ce type de système, un morceau de code de bas niveau bascule entre les tâches ou les threads en fonction d'un minuteur qui invoque une interruption. C'est à ce niveau que le système est généralement considéré comme doté d'un noyau de système d'exploitation. Selon la quantité de fonctionnalités requises, il introduit plus ou moins de complexités liées à la gestion de plusieurs tâches exécutées conceptuellement en parallèle.
Comme tout code peut potentiellement endommager les données d'une autre tâche (sauf dans les systèmes utilisant une unité de gestion de la mémoire ), les programmes doivent être soigneusement conçus et testés, et l'accès aux données partagées doit être contrôlé par une stratégie de synchronisation telle que des files d'attente de messages , des sémaphores ou un schéma de synchronisation non bloquant .
En raison de ces complexités, il est courant pour les entreprises d'utiliser un RTOS prêt à l'emploi, ce qui permet aux programmeurs d'applications de se concentrer sur les fonctionnalités de l'appareil plutôt que sur les services du système d'exploitation. Le choix d'inclure un RTOS pose toutefois ses propres problèmes, car la sélection doit être effectuée avant de commencer le processus de développement de l'application. Ce calendrier oblige les développeurs à choisir le système d'exploitation intégré pour leur appareil en fonction des exigences actuelles et limite ainsi dans une large mesure les options futures.
Le niveau de complexité des systèmes embarqués ne cesse de croître, car les appareils doivent gérer des périphériques et des tâches telles que les communications série, USB, TCP/IP, Bluetooth , LAN sans fil , radio à faisceaux, canaux multiples, données et voix, graphiques améliorés, états multiples, threads multiples, nombreux états d'attente, etc. Ces tendances conduisent à l'adoption de middlewares embarqués en plus d'un RTOS.
Micro-noyaux et exo-noyaux
Un micro-noyau alloue de la mémoire et commute le processeur vers différents threads d'exécution. Les processus en mode utilisateur implémentent des fonctions majeures telles que les systèmes de fichiers, les interfaces réseau, etc.
Les exokernels communiquent efficacement par des appels de sous-programmes normaux. Le matériel et tous les logiciels du système sont accessibles et extensibles par les programmeurs d'applications.
Noyaux monolithiques
Un noyau monolithique est un noyau relativement volumineux doté de fonctionnalités sophistiquées adaptées à un environnement embarqué. Il offre aux programmeurs un environnement similaire à un système d'exploitation de bureau comme Linux ou Microsoft Windows , et est donc très productif pour le développement. En revanche, il nécessite beaucoup plus de ressources matérielles, est souvent plus cher et, en raison de la complexité de ces noyaux, peut être moins prévisible et fiable.
Les exemples courants de noyaux monolithiques intégrés sont Linux , VXWorks et Windows CE intégrés .
Malgré l'augmentation du coût du matériel, ce type de système embarqué gagne en popularité, en particulier sur les appareils embarqués les plus puissants tels que les routeurs sans fil et les systèmes de navigation GPS .
Composants logiciels supplémentaires
En plus du système d'exploitation principal, de nombreux systèmes embarqués disposent de composants logiciels de couche supérieure supplémentaires. Ces composants incluent des piles de protocoles réseau comme CAN , TCP/IP , FTP , HTTP et HTTPS , ainsi que des capacités de stockage comme FAT et des systèmes de gestion de mémoire flash. Si le périphérique embarqué dispose de capacités audio et vidéo, les pilotes et codecs appropriés seront présents dans le système. Dans le cas des noyaux monolithiques, bon nombre de ces couches logicielles peuvent être incluses dans le noyau. Dans la catégorie des systèmes d'exploitation en temps réel, la disponibilité de composants logiciels supplémentaires dépend de l'offre commerciale.
Architectures spécifiques à un domaine
Dans le secteur automobile, AUTOSAR est une architecture standard pour les logiciels embarqués.