# FreeRTOS

FreeRTOS (Free Real-Time Operating System) è uno dei più popolari kernel di sistema operativo real-time utilizzato nei dispositivi embedded. È open source e distribuito secondo la licenza MIT.

## Implementazione

FreeRTOS è stato ideato per essere compatto e semplice da utilizzare. Il kernel è composto da soli tre file in linguaggio C. Per rendere il codice più leggibile, quindi facile da "portare" a nuove architetture, e da gestire, la maggior parte del sorgente è scritto in C, ma, dove necessario, sono presenti varie funzioni in assembly (soprattutto nelle routine di schedulazione relative alle specifiche architetture).
FreeRTOS fornisce alcuni metodi per la creazione di threads o istruzioni multiple, mutex, semafori e software timer. Per le applicazioni a basso consumo è possibile utilizzare una modalità tickless kernel. FreeRTOS supporta e gestisce le priorità dei thread. I programmi FreeRTOS possono essere allocati in modo completamente statico. In alternativa gli oggetti RTOS possono essere allocati in modo dinamico con cinque schemi di allocazione possibili:
* solo allocazione;
* allocazione e deallocazione con un semplice e rapido algoritmo;
* un algoritmo più complesso ma più veloce per la allocazione e la deallocazione che fa uso di memoria coalescente;
* un'alternativa allo schema più complesso che usa la coalescenza della memoria, che consente ad un heap di essere frammentato in più aree di memoria;
* una libreria in C di allocazione e deallocazione con protezione in mutua esclusione.
Non esiste nessuna delle funzioni più avanzate che si trovano in genere in sistemi operativi come Linux o Microsoft Windows, come driver per dispositivi esterni, gestione avanzata della memoria, account utente e rete. L'enfasi viene posta piuttosto sulla compattezza e sulla velocità di esecuzione. FreeRTOS può essere considerato come una libreria di supporto ai thread, piuttosto che come un 'sistema operativo', anche se sono disponibili interfacce a riga di comando e degli addon compatibili POSIX per l'astrazione degli I/O.
FreeRTOS implementa i thread facendo in modo che il programma host richiami un metodo "thread tick" a brevi intervalli regolari. Il metodo thread tick abilita i task in base ad una schedulazione con priorità ed a round-robin. L'intervallo di tick è solitamente compreso in un range tra 1/1000 ed 1/100 di secondo, innescato da un interrupt proveniente da un realtime clock hardware, ma viene spesso modificato per adattarsi alla particolare applicazione.
Il download di FreeRTOS contiene configurazioni preimpostate e programmi demo per ogni port di architettura e per ogni compilatore, permettendo un rapido utilizzo. Sul sito FreeRTOS.org è presente una vasta sezione di documentazione e molti tutorial (manuali aggiuntivi e altro materiale sono disponibili a pagamento), così come dettagli sulla struttura dell'RTOS.

## Caratteristiche principali

* Esistono manuali in PDF e guide di riferimento gratuiti;
* Minima occupazione di memoria, basso overhead, e veloce esecuzione dei programmi;
* Modalità tickless opzionale per applicazioni che richiedono basso consumo;
* È ideale sia per gli hobbisti alle prime armi con i sistemi operativi che per gli sviluppatori professionisti che creano prodotti commerciali;
* Lo schedulatore può essere configurato sia per le operazioni preemptive che per le cooperative;
* Supporta le coroutine (la coroutine in FreeRTOS è molto semplice ed è formata da processi leggeri che hanno un limitato impatto d'uso dello stack)
* Supporto al tracing del programma, tramite macro generiche di traccia. Strumenti come Tracealyzer (cioè FreeRTOS + Trace, fornite dal partner Percepio di FreeRTOS) possono quindi registrare e visualizzare il comportamento di runtime dei sistemi basati su FreeRTOS. Ciò include la pianificazione delle attività e le chiamate del kernel per operazioni di semaforo e coda. Tracealyzer è uno strumento commerciale, ma è anche disponibile in una versione libera a funzionalità limitata. La versione completa ha un prezzo di 1066 € (US$1,200).

## Progetti correlati
### SafeRTOS

SafeRTOS è stato costruito come prodotto complementare al FreeRTOS, con funzionalità in comune ma designato per conferire maggiore sicurezza e stabilità. Quando FreeRTOS venne sottoposto all'analisi di pericolo e operabilità, si verificarono condizioni di instabilità e debolezza causati dall'uso intensivo che ne venne fatto da un utente e vari guasti dell'hardware all'interno del modello funzionale. Per risolvere il problema, è stato identificato l'API difettoso ed è stato corretto.
SafeRTOS è stato sviluppato dalla WITTENSTEIN, che produce sistemi ad elevata integrazione, in collaborazione con la Real Time Engineers Ltd, sviluppatore principale del progetto FreeRTOS. Sia SafeRTOS che FreeRTOS condividono lo stesso algoritmo di schedulazione, hanno simili API, e altre caratteristiche in comune, ma sono stati sviluppati con obiettivi differenti. SafeRTOS è stato sviluppato interamente in C, al fine di uniformarsi con i requisiti richiesti dalla certificazione IEC 61508.
SafeRTOS è conosciuto per la sua capacità, unica tra i sistemi operativi, di risiedere esclusivamente nella memoria di sola lettura nei chip di un microcontrollore, consentendo così la pre-certificazione di sistemi hardware e software completi all'IEC 61508 o ad altri standard operativi di sicurezza ed affidabilità. Quando poi viene implementato nella memoria hardware, il codice SafeRTOS può essere utilizzato solo nella sua configurazione originale, pertanto i test di certificazione delle applicazioni che utilizzano questo sistema operativo non devono riesaminare questa parte durante il processo di certificazione funzionale.
SafeRTOS è incluso nella ROM di alcuni microcontrollori Stellaris della Texas Instruments. È possibile implementare SafeRTOS senza dover acquistare il codice sorgente. In questo campo di applicazione, per mappare le funzioni API nella loro posizione all'interno della ROM viene usato un semplice file header in C. È consigliabile l'utilizzo della ROM perché il codice che contiene il file in questione non è modificabile - scartando la possibilità che un utente erroneamente acceda al codice e lo modifichi - e garantisce che la versione originale testata rimanga identica per tutto il periodo di utilizzo. Non sarà necessario riesaminare il codice dell'applicazione in modo che si evolva attorno ad esso. Il test del kernel complesso non più viene effettuato in quanto le prove di certificazione già approvate, inclusi il piano di prova, il codice e i risultati, possono essere acquistati "fuori dal piano".

### OpenRTOS

Un altro progetto relativo al FreeRTOS, con un codice identico ma differente per licenza e prezzo, è OpenRTOS creato dall'azienda WITTENSTEIN Aerospace and Simulation Ltd. I termini della licenza commerciale per OpenRTOS sopprimono ogni riferimento alla licenza GPL. Per esempio, una delle condizioni per l'utilizzo del prodotto per applicazioni commerciali pretende che l'utente dev'essere consapevole dell'uso di OpenRTOS e il relativo codice sorgente, ma non il codice dell'applicazione del prodotto commerciale, pertanto dev'essere fornito dietro richiesta.OpenRTOS è un prodotto commerciale disponibile solo tramite acquisto e non ha requisito obbligatorio di licenza; acquistandola dietro pagamento però si ha la possibilità di accedere alla documentazione integrale di supporto tecnico.