leOS - un semplice OS per schedulare piccoli task

@leo72: c'è qlk posto in cui raccogli le librerie da te pubblicate?

m_ri:
@leo72: c'è qlk posto in cui raccogli le librerie da te pubblicate?

Il mio sito (linkato nella mia firma) contiene tutto quello che ho fatto (forse manca un progetto) nel recente passato.

Non ci avevo proprio fatto caso :slight_smile: x di più avevi pure messo leoS..

Ciao Leo, ottimo lavoro!
Riguardo alla "diatriba" è un RTOS o meno, io dico che non so davvero a cosa possa servire un RTOS su, per esempio, un Arduino UNO, e che il tuo LeOS, per quanto schedulatore, è ciò che si avvicia di più all'astrazione di un OS, ma sopratutto è il componente di un OS che è più utile alla maggior parte degli utenti.
Quindi nome azzeccato o meno, un grazie per il codice che hai condiviso con tutti noi.
Detto questo, ho da poco ricevuto la Leonardo, che come vedo non è supportata... Ho letto il codice, ma mi perdo sulla setTimer() dove immagino giochi con timer, registri porte ecc. (Porc@^§*é?!"£ è una parte di sapere che devo ancora non approfondire, ma approcciare!!!) Pensi sia difficile includere il mega32u4?
N.

Se hai pazienza, vedo di studiare il datasheet del 32U4 e di infilarcelo dentro, ci stavo pensando oggi quando nell'IDE 1.0.1 ho visto la voce della Leonardo... ed ho pensato al leOS :stuck_out_tongue_closed_eyes:

claro que si! no ti presso mica XD

Prova un po' la versione allegata. La compilazione termina correttamente, mi manca la "prova sul campo".... Carica lo sketch BlinkWithoutMillis e dimmi che succede... :sweat_smile: :cold_sweat:

leOS-0.0.6.zip (20.8 KB)

...pensavo che con "pazienza" intendessi qulache giorno non qualche minuto!!
Per compilare compila, come sai. Per blinkare....direi che più che blinkare, pulsa. cioè non arriva a spegnersi che già si riaccende...pulsa insomma. Inoltre pulsa esattamente 14 volte, poi nulla più! Stesso circuito provato con la UNO funziona perfettamente. Ho provato anche il 3_task, ancora stesso circuito, UNO ok, Leonardo accende solo il led sul pin 8.
N.

EDIT:
sketch blinkWithoutMillis: sulla board il led L lampeggia con il led sulla breadborad. Quando (dopo i 14 blink) si spegne vedo due blink del led RX sulla board. poi solo ON fisso e tutto fermo.

Boh, ora ricontrollo. Senza avere la scheda in mano non è facile :sweat_smile:

Sovrascrivi il file leOS.cpp a quello che hai sul tuo PC e riprova.

leOS.cpp (8.59 KB)

complimenti per questa tua ennesima fatica,
sei una persona eccezionale, per le idee, e per la disponibilita' a condividere,

ricordi quando discutemmo di un delay non bloccante ? questa mi sembra la soluzione, anche se la mia idea originale sarebbe poter fare in modo trasparente un delay2(1000) non bloccante direttamente nell'ide, senza dover aggiungere il resto del codice, ma credo che questo potrebbe essere fatto solo dal team, aggiungendo una nuova funzione.

Ti ringrazio per le belle parole :sweat_smile:

Tornando alla tua richiesta, se un delay non è bloccante il flusso dell'elaborazione prosegue. Per controllare quando è il caso di effettuare un'operazione ci vuole uno scheduler che controlli le tempistiche. leOS fa questo. Non blocca nulla, e quando è l'ora di lanciare un task, lo lancia.

Nuova versione!
Ho introdotto i cosiddetti one-time task, task cioè che vengono eseguiti una sola volta e poi vengono permanentemente rimossi dallo scheduler. Utili se si deve programmare un'azione da far eseguire nel futuro.
Esempio:

myOS.addTask(funzione, 360000, ONETIME);

questo codice eseguirà funzione 1 sola volta, esattamente fra 360000 ms, cioè 6 minuti.

@superp:
aspetto ancora notizie sul test con la Leonardo

leOS-0.0.7.zip (22.6 KB)

leo72:
Nuova versione!
Ho introdotto i cosiddetti one-time task, task cioè che vengono eseguiti una sola volta e poi vengono permanentemente rimossi dallo scheduler. Utili se si deve programmare un'azione da far eseguire nel futuro.
Esempio:

myOS.addTask(funzione, 360000, ONETIME);

questo codice eseguirà funzione 1 sola volta, esattamente fra 360000 ms, cioè 6 minuti.

@superp:
aspetto ancora notizie sul test con la Leonardo

Scusa Leo sono dovuto scappare e sto rientrando solo ora. Conto di lanciare il test domattina prima di uscire di casa.
N.

superp:
Scusa Leo sono dovuto scappare e sto rientrando solo ora. Conto di lanciare il test domattina prima di uscire di casa.
N.

Non ti devi scusare :wink:

Buondì,
@Leo
ho provato il .cpp allegato al tuo post, ma la situazione non cambia; stesso comportamento descritto prima. Stasera vedo di rimetterci mano e cercare di aiutarti un po più attivamente...almeno spero!
N.

Non è facile operare con una cosa che non si ha a portata di mano... :sweat_smile:
Stasera riguardo il datasheet e magari cambio timer :wink:

grande leo!!!! ottima idea!

ps. ma stai già implementando i leonardo? come siamo messi a differenza di registri?

Ma come! Non te ne eri accorto? :sweat_smile: :sweat_smile:

Cmq grazie dei complimenti.

A livelli di timer siamo messi maluccio perché i timer sono 4.
Timer 0: 8 bit
Timer 1 e 3: a 16 bit
Timer 4: a 10 bit
Stranamente manca il timer 2... boh... Ed i registri non hanno una corrispondenza al 100% con quelli dell'Arduino. Inoltre non ho guardato il core per sapere se a parte per la millis ci sono timer o interrupt usati. Sta di fatto che attualmente sulla Leonardo ancora il leOS non funziona :stuck_out_tongue_closed_eyes:

Ma il suo datasheet l'ho letto pochissimo, il core ancora di meno... quindi navigo a vista :wink:

leo72:
Ma come! Non te ne eri accorto? :sweat_smile: :sweat_smile:

:astonished: non so come possa essere successo, stasera mi metto mezz'oretta in ginocchio sui ceci