leOS - un semplice OS per schedulare piccoli task

Forse sono riuscito a capire...
Con questa librera posso eseguire operazioni a ripetizione senza sfruttare il loop?
Quindi potrei utilizzare il loop per eseguire altre operazioni.

Bella idea! :smiley:

Usa il timer 2 per gestire i task dell'utente e, ovviamente, fa perdere le funzionalità PWM sui pin 3 e 11.

Non so se ho capito bene qui... Utilizzi un RTC?

Ciao e bel lavoro! :wink:

Complimenti per il lavoro.
Ma se non ricordo male era stato creato un piccolo kernel anche da un'altro utente, credo per una tesi. :roll_eyes:

EDIT: Leo, che differenze ci sono tra la tua libreria e questa? -->Arduino Playground - TimedAction Library

mi sa che usa il timer interno di arduino :grin: carino io quando non ho nulla da fare per lo più progetto,tu sei molto piu creativo XD

PaoloP:
EDIT: Leo, che differenze ci sono tra la tua libreria e questa? -->Arduino Playground - TimedAction Library

Mi rispondo da solo.
La TimedAction usa la funzione millis per stabilire l'intervallo di tempo e quindi eseguire il task.
La TimedAction viene bloccata in caso di delay.

La libreria di Leo invece usa un timer interno per richiamare la funzione puntata e quindi non è soggetta al resto del codice. Non si blocca quindi neanche durante un delay.

Una domanda: il timer2 potrebbe andare in conflitto con altre periferiche interne al micro, tipo I2C, SPI o Seriale?

OK, gente, si è risolto il dubbio! 8)

Leo complimenti, ti stai superando, appena riesco lo provo :slight_smile:

Bisbulle:
Forse sono riuscito a capire...
Con questa librera posso eseguire operazioni a ripetizione senza sfruttare il loop?

Sì è scritta apposta per semplificare la stesura del loop ed evitare tutte quelle operazioni che spesso si eseguono usando millis().

Quindi potrei utilizzare il loop per eseguire altre operazioni.

Bella idea! :smiley:

Nel loop ci va il programma principale.
I task che puoi far gestire a leOS sono operazioni ripetitive e semplici che però spesso ingarbugliano il codice, come ad esempio l'attivare un pin ogni tot.

Usa il timer 2 per gestire i task dell'utente e, ovviamente, fa perdere le funzionalità PWM sui pin 3 e 11.

Non so se ho capito bene qui... Utilizzi un RTC?

Ciao e bel lavoro! :wink:

No. Il micro ha 3 contatori interni che si chiamano appunto timer. Il timer 0 viene usato da Arduino per la millis(), gli altri 2 sono liberi.

PaoloP:
Complimenti per il lavoro.
Ma se non ricordo male era stato creato un piccolo kernel anche da un'altro utente, credo per una tesi. :roll_eyes:

Ce ne sono tanti. A parte quello da te citato, e che non ritrovo perché non mi ricordo neanche l'utente che lo pubblicò, c'è ad esempio FemtoOS, un RTOS moooooolto più sofisticato del mio. Il mio più che un RTOS è uno schedulatore, se vogliamo proprio dirla tutta perché non ha nessuno strumento degli RTOS per la gestione dei task. A cominciare dal fatto che non è un SO di tipo preemptive per cui se un task si blocca, si blocca tutta la baracca XD
Ma siamo alla versione 0.0.1, io dico che qualcosa si può ancora fare :stuck_out_tongue:

EDIT: Leo, che differenze ci sono tra la tua libreria e questa? -->Arduino Playground - TimedAction Library

Mi pare implementi i protothread e sceduli tutto con la millis().

Madwriter:
mi sa che usa il timer interno di arduino :grin: carino io quando non ho nulla da fare per lo più progetto,tu sei molto piu creativo XD

Beh, ogni tanto mi passano queste bischerate per la testa XD
Era qualche giorno che ci pensavo. Ieri pomeriggio a casa ho scritto il core centrale, poi a lavoro ieri sera ho fatto un po' di debug e le ultime cose le ho corrette stamattina.

PaoloP:

PaoloP:
EDIT: Leo, che differenze ci sono tra la tua libreria e questa? -->Arduino Playground - TimedAction Library

Mi rispondo da solo.
La TimedAction usa la funzione millis per stabilire l'intervallo di tempo e quindi eseguire il task.
La TimedAction viene bloccata in caso di delay.

La libreria di Leo invece usa un timer interno per richiamare la funzione puntata e quindi non è soggetta al resto del codice. Non si blocca quindi neanche durante un delay.

Esatto. Come puoi vedere dall'esempio allegato, i 2 led pilotati dai 2 task continuano il loro lampeggio nonostante nel loop principale ci sia un delay per governare il lampeggio del 3° led.
Questo perché ho creato un contatore di ms interno al timer 2 ed uso quello per controllare il trascorrere del tempo.

Una domanda: il timer2 potrebbe andare in conflitto con altre periferiche interne al micro, tipo I2C, SPI o Seriale?

Io ho provato la stampa su seriale dopo aver aggiunto i 2 task ed ha funzionato. Però tutto quello che viene gestito da interrupt può influenzare il leOS, così come tutto quello che è gestito da interrupt si influenza attualmente. Pensa che la gestione dell'I2C è fatta via interrupt così come la seriale, eppure nessuno lo nota né si lamenta :wink:

ratto93:
Leo complimenti, ti stai superando, appena riesco lo provo :slight_smile:

Ma va, dai :sweat_smile: :sweat_smile:

leo72:

Madwriter:
mi sa che usa il timer interno di arduino :grin: carino io quando non ho nulla da fare per lo più progetto,tu sei molto piu creativo XD

Beh, ogni tanto mi passano queste bischerate per la testa XD
Era qualche giorno che ci pensavo. Ieri pomeriggio a casa ho scritto il core centrale, poi a lavoro ieri sera ho fatto un po' di debug e le ultime cose le ho corrette stamattina.

Complimenti, bel lavoro.
Conosco questi "ingrippi" vengono spesso anche a me e finchè non relizzo la cosa che ho in testa non sto in pace con me stesso :grin:

Mi ero dimenticato di dire una cosa, che non suonerà nuova a chi ha già dato un'occhiata al file .cpp.
L'OS dovrebbe girare su tutti i micro attualmente supportabili dall'IDE in maniera più o meno ufficiale, ossia gli Atmega8/88/168/328, i Mega1280/2560 (quindi girare anche sulle Arduino MEGA), i Tiny25/45/85 e 24/44/84, i Tiny2313/4313 ed i Mega644/1284.

Per mancanza di tempo NON ho potuto fare i test su nessun chip diverso dal 328 (ho usato la mia Arduino UNO) per cui se qualcuno ha voglia di provare, mi faccia sapere come va. :wink:
Soprattutto sui Tiny sarebbe interessante sapere l'impatto in termini di prestazioni su micro con clock inferiori ai 16 MHz dell'Arduino.

PS:
vi svelo una cosa.... leOS non sta solo per "little embedded Operating System". Siccome sono molto egocentrico, è anche un gioco di parole sul mio nome "leo" :sweat_smile: :sweat_smile: leoS però si capiva troppo, quindi ho scelto leOS.
Modesto, vero? :stuck_out_tongue:

Utilissimo, sei un grande! Inoltre "leOS" sa molto di: sistema operativo di Leo :smiley:

EDIT: battuto sul tempo :stuck_out_tongue:

leo72:
PS:
vi svelo una cosa.... leOS non sta solo per "little embedded Operating System". Siccome sono molto egocentrico, è anche un gioco di parole sul mio nome "leo" :sweat_smile: :sweat_smile: leoS però si capiva troppo, quindi ho scelto leOS.
Modesto, vero? :stuck_out_tongue:

hahahahah io l'avevo immaginato ]:smiley:

leo72:
PS:
vi svelo una cosa.... leOS non sta solo per "little embedded Operating System". Siccome sono molto egocentrico, è anche un gioco di parole sul mio nome "leo" :sweat_smile: :sweat_smile: leoS però si capiva troppo, quindi ho scelto leOS.
Modesto, vero? :stuck_out_tongue:

Sei proprio un hacker, e lo si vede anche da questo nome originale e ti consiglio di lavoraci ancora un poco.
Dai anche una occhiata a come spostare il puntatore PC, come salvare la situazione nello stack e come fare la cosa
contraria e allora sei ad un passo dal kernel premptive. Io però non saprei dove mettere le mani, se studi e vuoi condividere può essere che impariamo qualcosa tutti quanti sugli RTOS.

Ciao.

Appena provata con il tuo esempio! E' fantastica complimenti!! :slight_smile:

leo72:
Modesto, vero? :stuck_out_tongue:

Guarda che l'avevamo capito tutti il chiaro riferimento al tuo nome e lo sforzo incredibile per trovare un acronimo compatibile :grin:

p.s.
Bel lavoro, complimenti.

astrobeed:

leo72:
Modesto, vero? :stuck_out_tongue:

Guarda che l'avevamo capito tutti il chiaro riferimento al tuo nome e lo sforzo incredibile per trovare un acronimo compatibile :grin:

+1 :smiley:

comunque bravo! bel lavoro:)