La programmation bare metal consiste à écrire un firmware qui s'exécute directement sur le matériel sans avoir d'abstraction sous-jacente comme les systèmes d'exploitation.
Généralement, les programmes bare metal auront un bootloader minimal pour initier le processeur,l'horloge et la mémoire et sauter au programme principal.
Dans les anciens systèmes embarqués, la programmation bare metal était assez courante car les microcontrôleurs n'avaient pas la bande passante pour exécuter des systèmes d'exploitation volumineux. Progressivement, comme la technologie a mûri et que les processeurs étaient beaucoup plus puissants, l'utilisation de systèmes d'exploitation est apparue. Mais jusqu'à ce jour, il y a beaucoup de systèmes embarqués à petite échelle qui exécutent encore des programmes bare metal.
Généralement, la programmation bare metal est utilisée dans les scénarios suivants.
- Lorsque vous concevez un système bas de gamme utilisant un microcontrôleur bas de gamme et que vous exécutez votre code en boucle while 1. Vous ne disposez pas de la bande passante du CPU et d'une mémoire plus élevée pour exécuter et charger les systèmes d'exploitation.
- Lorsque le temps de démarrage de votre système est rigoureux et que vous ne pouvez pas'réaliser en utilisant un système basé sur un OS. Le système basé sur le système d'exploitation prend le temps de démarrage en secondes et donc pas réalisable lorsque vous voulez un temps de démarrage déterministe.
- Lorsque vous voulez un contrôle direct sur chaque pièce de matériel et de registre pour répondre à vos exigences de temps.
- Lorsque vous voulez éliminer la surcharge du système d'exploitation
- Lorsque vous mettez en œuvre des boucles de contrôle où l'acquisition de données à partir de l'ADC et le traitement pour déclencher PWM dans la rétroaction nécessite des performances en temps réel difficiles.
- Vous voulez posséder et contrôler chaque morceau de code que vous écrivez et ne'voulez pas utiliser des modules externes en raison de problèmes de licence ou pour payer des redevances à des tiers, etc.
- Ce sont les cas les plus proéminents où les gens vont avec la programmation bare metal.
Mais il y a aussi quelques inconvénients.
- Vous n'avez pas le luxe d'avoir un OS qui vous abstrait du matériel sous-jacent, vous n'avez pas à vous soucier de l'écriture de pilotes de périphériques, de l'ordonnanceur, de la gestion de la mémoire, de la gestion des threads, etc. Tout ce que vous avez à faire est de vous concentrer sur le développement de votre application.
- Vous avez juste à appeler les API's et pas besoin de s'inquiéter de la superposition de votre code,
- Pas besoin de s'inquiéter de la fixation des problèmes au niveau du pilote ou du noyau car ces modules sont déjà en bonne forme.
- Vous obtenez beaucoup d'outils, de code source ouvert pour se référer tout en construisant votre code.
- Vous pouvez construire plus de composants modulaires et réutilisables.
- Vous obtenez des outils pour déboguer votre code. Don't have to hang on to JTAG for memory dump analysis.
- Vous pouvez construire des systèmes embarqués beaucoup plus complexes avec une interface utilisateur jazzy et un serveur web, etc.
Donc, vous devez décider en fonction de vos besoins.
.