Pourquoi un développeur bare metal est passé aux systèmes d'exploitation
Retour à l'ère du Bare-Metal
La première fois que j'ai entendu parler du logiciel embarqué, c'était vers 2008, j'étais en deuxième année et j'ai commencé à apprendre la programmation sur une puce 51. Depuis que je me suis spécialisé en informatique, la plupart de mes programmes ont été exécutés sur PC. C'était une expérience complètement différente de voir des programmes s'exécuter sur une carte en métal nu, et je me souviens encore de l'excitation lorsque mon premier programme de lampe à vélo s'est déroulé avec succès. Cependant, plus j'écrivais de programmes bare metal, plus je rencontrais de problèmes. Je les résume comme suit :
Concurrence
Pour les programmes bare-metal, il y a inévitablement une énorme boucle « while (1) », qui contient presque toute la logique de transaction de l'ensemble du projet. Chaque transaction invoque une ou plusieurs fonctions de retard et elles sont exécutées en série lorsque la CPU exécute une fonction de retard, le reste des transactions doit attendre. De cette façon, une grande partie du temps CPU est gaspillée sur des boucles vides, ce qui entraîne une assez faible simultanéité.
Modularité
Du point de vue du projet logiciel, le principe de cohésion élevée et de couplage faible est toujours souligné au cours du processus de développement. Cependant, les modules d'un logiciel bare-metal dépendent généralement fortement les uns des autres, il n'est pas pratique de concevoir des logiciels avec un faible couplage, ce qui rend difficile le développement de grands projets sur des cartes bare-metal. Par exemple :
- Comme mentionné ci-dessus, la plupart des fonctions sont rassemblées dans une énorme boucle "while (1)" et difficiles à diviser en modules.
- En tant qu'autre exemple, les développeurs doivent faire attention à utiliser les fonctions de retard lorsque le temporisateur de surveillance est impliqué. Si le temps de retard est trop long, la fonction principale n'a pas la possibilité de réinitialiser le chien de garde, alors le chien de garde sera déclenché pendant l'exécution. Ainsi, pour le développement sans système d'exploitation, il y a trop de choses à considérer même lors de l'invocation d'une fonction de délai. Plus le projet est complexe, plus il faut être prudent.
Écosystème
De nombreux composants logiciels avancés doivent dépendre de la mise en œuvre du système d'exploitation de niveau inférieur. Par exemple :
- J'ai développé un projet open-source basé sur 'FreeModbus' que j'avais prévu de transplanter sur diverses plateformes, même les cartes bare-metal ont été envisagées. Mais par rapport à la commodité de l'adapter à différents systèmes d'exploitation, certaines fonctions sont trop complexes à mettre en œuvre sur toutes les cartes bare-metal. D'un autre côté, de nombreuses implémentations doivent être conçues à partir de zéro sur différentes plates-formes matérielles en raison du manque de points communs, ce qui est une tâche ennuyeuse et chronophage. Pour l'instant, mon implémentation de la pile Modbus n'est toujours pas capable de fonctionner sur des cartes en métal nu.
- De nombreux kits de développement logiciel (SDK) WiFi fournis par de grandes entreprises telles que Realteck, TI et MediaTek ne peuvent être exécutés que sur le système d'exploitation. Ils ne publient pas le code source du micrologiciel pour que l'utilisateur puisse le modifier, vous ne pouvez donc pas les utiliser dans l'environnement bare-metal.
En temps réel
La capacité en temps réel est nécessaire pour certains domaines d'application. Dans cette situation, certaines étapes critiques du logiciel doivent être déclenchées à un moment précis. Pour le contrôle de l'industrie, les dispositifs mécaniques doivent effectuer des actions dans un ordre et un calendrier prédéterminés. Si la capacité en temps réel ne peut pas être assurée, cela entraînera des dysfonctionnements pouvant mettre en danger la vie des travailleurs. Sur les plates-formes bare-metal, lorsque toutes les fonctions sont bloquées dans une seule grande boucle « while (1) », il est impossible de maintenir les capacités en temps réel.
Réutilisabilité
La réutilisabilité dépend directement de la modularité. Je crois que personne n'aimerait refaire le même travail encore et encore, surtout lors de l'écriture de code. Mais sur différentes plates-formes matérielles avec différentes puces, la même fonction doit être adaptée à différents matériels, dont les implémentations dépendent fortement du matériel de bas niveau. Il est inévitable de reconstruire des roues.
L'avantage des systèmes d'exploitation
C'était vers 2010 lorsque j'ai utilisé le système d'exploitation pour la première fois. La série de MCU STM32 commençait à être populaire. Avec des fonctionnalités puissantes, de nombreuses personnes ont exécuté des systèmes d'exploitation dessus. J'utilisais alors le système d'exploitation RT-Thread pour lequel il existe de nombreux composants disponibles et prêts à l'emploi. Par rapport à d'autres systèmes d'exploitation, je me sens plus à l'aise et je développe dessus depuis 10 ans.
D'après ce que j'ai compris, j'aimerais discuter des avantages des systèmes d'exploitation :
Modularité
Avec le système d'exploitation, l'ensemble du logiciel pourrait être divisé en plusieurs tâches (appelées threads), chaque thread a son propre espace d'exécution indépendant. Ils sont indépendants les uns des autres, ce qui améliore la modularité.
Concurrence
Lorsqu'un thread invoque la fonction de délai, il cède automatiquement le CPU aux autres threads qui en ont besoin, ce qui améliore l'utilisation de l'ensemble du CPU et, finalement, la simultanéité.
En temps réel
Un RTOS est conçu avec des capacités en temps réel. Chaque thread se voit attribuer une priorité spécifiée. Les threads les plus importants sont définis sur une priorité plus élevée, les threads moins importants sont définis sur les plus faibles. De cette façon, les performances en temps réel de l'ensemble du logiciel sont garanties.
Efficacité du développement
Le système d'exploitation fournit une couche unifiée d'interfaces abstraites, ce qui facilite l'accumulation de composants réutilisables et améliore l'efficacité du développement.
Le système d'exploitation est le produit de la sagesse d'un groupe de geeks du logiciel. De nombreuses fonctions logicielles courantes, telles que le sémaphore, la notification d'événement, la boîte aux lettres, la mémoire tampon en anneau, la liste de chaînes unidirectionnelle / liste bidirectionnelle, etc., sont encapsulées et abstraites pour rendre ces fonctions prêtes à l'emploi.
Les systèmes d'exploitation tels que Linux et RT-Thread implémentent un ensemble standard d'interfaces matérielles pour le matériel fragmenté, connu sous le nom de framework de pilote de périphérique. Par conséquent, les ingénieurs logiciels n'ont besoin de se concentrer que sur le développement et n'ont plus besoin de se préoccuper du matériel sous-jacent ou de reconstruire des roues.
Écosystème logiciel
La richesse de l'écosystème amène le processus de changements quantitatifs à des changements qualitatifs.
L'amélioration de la modularité et de la réutilisabilité avec les systèmes d'exploitation nous permet d'encapsuler des composants réutilisables basés sur le système d'exploitation et intégrés, qui peuvent non seulement être utilisés dans nos projets, mais peuvent également être partagés avec davantage de développeurs embarqués dans le besoin, maximisant ainsi la valeur du logiciel.
Je suis un geek open source et j'ai open source des logiciels embarqués sur GitHub. Avant de créer des logiciels open source, je parlais rarement de mes projets avec les autres car je considérais que, du fait que les gens utilisaient des puces ou des plates-formes matérielles différentes, mon code pouvait difficilement s'exécuter sur leur matériel. Avec les systèmes d'exploitation, la réutilisabilité des logiciels est grandement améliorée, de nombreux experts peuvent communiquer entre eux sur le même projet. Ils viennent même de pays différents. Cela encourage de plus en plus de personnes à partager et à parler de leurs projets.
Embarqué
- Systèmes de numération
- Systèmes de signalisation actuels
- Traçage des contacts dans l'industrie :pourquoi nous avons besoin de systèmes de positionnement local ultra-précis basés sur le Wi-Fi
- Pourquoi supportons-nous toujours les pannes de courant ?
- Pourquoi la cybersécurité est essentielle à la tranquillité d'esprit de la sécurité physique
- 3 raisons pour lesquelles un système de convoyeur pneumatique est supérieur
- Pourquoi l'informatique Les systèmes sont la clé de l'évolution de la chaîne d'approvisionnement mondiale
- Pourquoi les chaînes d'approvisionnement pharmaceutiques doivent passer au numérique :six questions à prendre en compte
- Procédures d'exploitation sûres pour les systèmes à air comprimé