leOS - un semplice OS per schedulare piccoli task

Arriva leOS2 2.1.0.
Questa è la prima versione stabile del leOS2. Ho corretto un bug per cui non veniva rispettato il valore di timeout passato in fase di inizializzazione prima di resettare il microcontrollore: nella precedente 2.0.91 il reset avveniva immediatamente, indipendentemente dal valore passato, mentre adesso viene rispettato perfettamente.

Lo sketch di test mostra il comportamento di questa funzione a mio avviso molto interessante: creo 2 task, 1 che fa lampeggiare un led con una frequenza di 500 ms, un altro task invece viene lanciato dopo 5 secondi e freeza la CPU del micro con un ciclo infinito. Nel loop() metto un lampeggio di un altro led con frequenza di 100 ms.
Si può notare come dopo 5 secondi di attività, il micro si congeli. Trascorso il tempo di timeout impostato, l'Atmega viene resettato.

Tutto questo usando sempre il solo WatchDog, quindi niente timer od altro messi nel mezzo. Ricordo che la cosa è possibile creando una ISR di gestione dell'interrupt del contatore del watchdog non atomica, quindi interrompibile da altri eventi. In questo modo posso invocare un task e contemporaneamente richiamare la ISR al successivo overflow del contatore del watchdog e decrementare il valore di timeout. Se il task completa l'esecuzione entro il tempo di timeout, l'esecuzione del codice prosegue regolarmente, altrimenti l'ISR continua a decrementare il timeout. Se questo giunge a 0, viene impostato un flag per cui al successivo overflow del watchdog non venga più sollevato un interrupt ma venga resettato direttamente il microcontrollore.

Per il download ed ulteriori approfondimenti:
www.leonardomiliani.com/?p=516