In questo articolo cercheremo di chiarire le differenze tra queste due opzioni e di illustrarvi i vantaggi e gli svantaggi di ciascuna.
Un firmware bare metal è un software che non utilizza un sistema operativo, ma esegue direttamente il codice dell’applicazione sul microprocessore o sul microcontrollore. Un firmware bare metal ha il vantaggio di essere più semplice, veloce e prevedibile, ma anche più limitato nelle funzionalità, nella portabilità e nella scalabilità.
Un firmware con sistema operativo è un software che utilizza un sistema operativo embedded, ovvero un software che fornisce un’astrazione delle risorse hardware e offre servizi come la gestione dei processi, della memoria, della comunicazione e delle periferiche. Un firmware con sistema operativo ha il vantaggio di essere più flessibile, modulare e compatibile, ma anche più complesso, lento e soggetto a interferenze.
Firmware bare metal vs firmware embedded con Operating System
Naturalmente l’esecuzione di un sistema operativo comporta un overhead che altrimenti non si avrebbe e questo overhead può essere più o meno rilevante a seconda della configurazione del sistema operativo, dalle caratteristiche dell’hardware e dai servizi che si intende offrire. La scelta tra firmware bare metal o firmware con sistema operativo dipende da diversi fattori, tra cui:- Le prestazioni richieste: se il vostro progetto richiede una bassa latenza, una elevata affidabilità e una risposta deterministica agli eventi, potreste optare per un firmware bare metal. Se invece il vostro progetto richiede una maggiore flessibilità, una elevata interattività e una gestione complessa delle risorse, potreste optare per un firmware con sistema operativo.
- Le risorse disponibili: se il vostro progetto dispone di risorse limitate in termini di memoria, potenza di calcolo e consumo energetico, potreste optare per un firmware bare metal. Se invece il vostro progetto dispone di maggiori risorse o può permettersi di sacrificarne alcune in cambio di maggiori funzionalità, potreste optare per un firmware con sistema operativo.
- La portabilità e la scalabilità: se il vostro progetto è pensato per essere eseguito su una sola piattaforma hardware e non prevede modifiche o aggiornamenti futuri, potreste optare per un firmware bare metal. Se invece il vostro progetto è pensato per essere eseguito su diverse piattaforme hardware o prevede modifiche o aggiornamenti futuri, potreste optare per un firmware con sistema operativo.
- Alcune applicazioni in cui si preferiscono sistemi bare metal sono:
- Sistemi di controllo industriale, dove è necessario garantire una elevata precisione, affidabilità e sicurezza nel controllo dei processi produttivi;
- Sistemi di misura e acquisizione dati, per i quali è fondamentale acquisire e processare dati provenienti da sensori o strumenti di misura con una elevata frequenza e risoluzione;
- Sistemi di comunicazione wireless nei casi in cui è necessario implementare algoritmi personalizzati e ottimizzati per il microcontrollore e ridurre al minimo l’overhead o la vulnerabilità dovuti al sistema operativo.
- Sistemi multimediali che devono gestire flussi di dati audio e video con una elevata interattività;
- Sistemi intelligenti che devono eseguire algoritmi di intelligenza artificiale, apprendimento automatico o visione artificiale con una elevata complessità e flessibilità;
- Sistemi mobili, tipici casi in cui è necessario gestire diverse funzionalità e applicazioni con una elevata interattività e connettività.
- FreeRTOS: è un sistema operativo in tempo reale (RTOS) gratuito e open source, basato su un kernel minimale che offre solo i servizi essenziali di multitasking e sincronizzazione. È adatto per sistemi con risorse limitate che richiedono una bassa latenza e una elevata affidabilità.
- Linux Embedded: è una versione ridotta e personalizzabile del sistema operativo Linux, adattata per i sistemi embedded. È gratuito e open source, basato su un kernel monolitico che offre una vasta gamma di servizi e funzionalità. È adatto per sistemi con maggiori risorse che richiedono una maggiore flessibilità e compatibilità.
- Android: (ebbene sì!) è un sistema operativo basato su Linux Embedded, sviluppato da Google per i dispositivi mobili. È gratuito e open source, basato su un kernel monolitico modificato che offre una interfaccia grafica utente (GUI) e una piattaforma di sviluppo basata sulla macchina virtuale Java. È adatto per sistemi con elevate risorse che richiedono una elevata interattività e connettività.
- VxWorks: è un sistema operativo in tempo reale (RTOS) a pagamento e proprietario, sviluppato da Wind River Systems per i sistemi embedded critici. È basato su un kernel modulare che offre servizi avanzati di gestione dei processi, della memoria, della comunicazione e delle periferiche. È adatto per sistemi con elevate esigenze di sicurezza, robustezza e determinismo.
- QNX: è un sistema operativo in tempo reale (RTOS) a pagamento e proprietario, sviluppato da BlackBerry per i sistemi embedded complessi. È basato su un kernel microkernel che offre servizi distribuiti e trasparenti di gestione dei processi, della memoria, della comunicazione e delle periferiche. È adatto per sistemi con elevate esigenze di scalabilità, modularità e fault-tolerance.
- ChibiOS. Si tratta di un sistema operativo in tempo reale (RTOS) completo e gratuito. È disponibile sotto licenze open source (GPL3 o Apache 2.0) o commerciali. ChibiOS è progettato per essere compatto e veloce, supportando diverse architetture e offrendo vari servizi tra cui il multitasking preemptive, pile TCP/IP LwIP e uIP, la libreria per il file system FatFs e la piattaforma di intelligenza artificiale Edge Impulse.