Pubblichiamo un guest post di Emanuele Rampichini
Eccoci all’ultimo episodio della serie di articoli riguardanti i sistemi operativi realtime. La scorsa puntata vi ho lasciato dicendo che avrei parlato di sitemi operativi dedicati scritti da zero.
Essendo la lista di questo tipo di sistemi molto lunga (in realtà molti sistemi sono “parzialmente real time” essendo semplicemente kernel minimali per hardware specifico che implementano al massimo qualche algoritmo di scheduling a priorità fissa, o semplicemente FIFO con primitive di sistema molto rapide) mi limiterò a presentare Erika Enterprise, sistema su cui sto lavorando ultimamente per un piccolo approfondimento universitario.
Erika Enterprise è una implementazione di un subset delle API dello standard industriale OSEK/VDK per sistemi operativi minimali rilasciato sotto licenza GPL con linking exception. L’aderenza a questo tipo di standard fondamentalmente impone l’implementazione di un minimo di primitive di sistema (ci sono comunque diverse classi di conformità) che abbiano un impatto temporale e di spazio in memoria trascurabile sulle applicazioni che andranno a girare su svariati modelli di microcontrollori.
Il sistema operativo, progetto italianissimo, viene portato avanti dalla Evidence S.R.L., azienda nata come spin-off del laboratorio RETIS dell’Istituto Superiore Sant’Anna di Pisa ed è stato costruito sulla base della grande esperienza maturata sul kernel real time di ricerca S.Ha.R.K.
Quello che differenzia Erika dagli altri sistemi nel panorama degli RTOS dedicati è il fatto che incarna tutti i requisiti fondamentali per la costruzione di applicazioni real time e implementa soluzioni ed algoritmi all’avanguardia per quanto riguarda questo campo:
- Possibilità di utilizzare scheduler Fixed Priority o Eearliest Deadline First (algoritmo dinamico con gestione dei vincoli temporali sul singolo task).
- Primitive per la gestione delle risorse condivise come mutex e semafori interi.
- Algoritmi Stack Resource Policy e Immediate Priority Ceiling (slide di approfondimento per chi fosse interessato) che permettono di evitare problemi di inversione di priorità (fenomeno per il quale a causa delle risorse condivise un processo a priorità più bassa “ruba tempo CPU ad uno a priorità più alta) e possibilità di deadlock con l’utilizzo di risorse condivise.
- Possibilità di attivazione periodica di task attraverso l’utilizzo di allarmi.
- Footprint limitato (si parla di dimensioni variabili da 500 byte a poco più di un KiB in base al tipo di scheduler e di stack selezionato in fase di impostazione del progetto).
La Evidence grazie alla partnership con la Embedded Solutions mette a disposizione di sviluppatori interessati la piattaforma Flex Board, scheda dotata del microcontrollore dsPIC® della Microchip che, grazie al suo design modulare, può essere espansa con diverse schede figlie per applicazioni specifiche. Ovviamente il sistema operativo gira anche su altro hardware e si sta lavorando al porting su svariate piattaforme aggiuntive.
Insieme ad Erika Enterprise viene fornito l’ambiente di sviluppo RT-Druid basato su Eclipse, che porta in dote diversi esempi di codice (tutto in ansi C) e template specifici per l’hardware bersaglio che evitano di dover impazzire dietro a configurazioni strettamente legate all’hardware sottostante.
Ulteriore astrazione è la possibilità di progettare applicazioni in maniera visuale (attraverso la composizione di blocchi che verrano poi tradotti in codice automaticamente) e testarle in ambiente virtuale grazie ad un plugin disponibile per il programma open source scilab e per matlab.
Passiamo adesso alla piccola esperienza personale che ho avuto con questo sistema operativo.
Per quanto riguarda la fase di programmazione il processo risulta molto semplice. Ovviamente per semplice intendo solo a livello di test delle primitive del sistema operativo, programmare applicazioni real time richiede uno sforzo di analisi specifica del problema affrontato non indifferente.
Non avendo mai fatto niente del genere in passato e approcciando per la prima volta un sistema embedded, con un paio di giorni (manuali alla mano) insieme ad un mio compagno di studi siamo riusciti a programmare con successo diversi “casi tipo didattici” per testare la corrispondenza degli algoritmi di scheduling e di gestione delle risorse mutuamente esclusive teorici con le rispettive implementazioni su Erika.
Le varie prove sono state limitate a far accendere qualche led che simulasse il comportamento di task reali, con verifica finale del risultato in rapporto alle schedulazioni precedentemente fatte su carta.
Per chi volesse cimentarsi nella programmazione il wiki è un ottimo punto di partenza e per problemi particolari è disponibile un forum di supporto anche in lingua italiana.
Accantonando per un attimo i tecnicismi e le esperienze personali concludo la mia serie di articoli sul mondo real time con questi video per dimostrare anche ai meno esperti quali “magie” si possano creare con questo sistema operativo ed un semplice microcontrollore (ovviamente se programmati con cognizione di causa).