Go Down

Topic: millis() mi manda in crash. Va bene il leOS? (Read 2 times) previous topic - next topic

leo72


Grazie leo! Ho letto come funziona e devo farti i complimenti; sembra quasi un sistema Multitasking come lo scheduler del vecchio Windows95.

Forse quello di Win3.1, in cui un task prendeva il controllo del sistema, e se non lo restituiva bloccava l'intero SO  :smiley-yell:

Quote

Il tuo sistema è anni luce rispetto all'uso del millis e ne approfitterò per apprenderne l'uso.

Non esagerare  :smiley-sweat: :smiley-sweat:
E' però comodo per fare piccole cosucce, quel tipo di cosucce che spesso rompono le scatole perché devi farle in punti in cui dovresti modificare blocchi di codice per farle.

Quote

Una domanda: Si possono nidificare le funzioni della libreria?

No.
Siccome è uno scheduler molto primitivo e siccome è stato scritto per non appesantire il sistema, non salva lo stato della CPU prima di richiamare un task e non lo ripristina dopo la fine della sua esecuzione. Se metti l'inserimento di un task all'interno di un altro task, dopo pochi cicli hai riempito lo scheduler di task creati.
Ciò che vuoi fare lo puoi fare usando la definizione del tipo di task, ad esempio puoi creare Ammazzati come task ONETIME, cioè che sia eseguito solo una volta.

leo72


Dimenticavo: il mio aggeggio USA gli interrupt 0 e 1 ai quali sono collegati i pin dell'encoder.

Gli interrupt vengono segnalati al micro, che ne esegue poi il codice relativo in ordine di importanza e non appena "può farlo".
Nel senso che se sta eseguendo un task del leOS, ed arriva un interrupt dall'encoder, viene registrato in un registro l'elevamento dell'interrupt. Appena il task termina, il micro esegue la ISR corrispondente all'interrupt arrivato. Mentre esegue questa ISR, non esegue nessun altro interrupt, neanche quelli generati dal leOS, perché gli interrupt sono atomici.

Questo comportamento non si applica del tutto al leOS2, che usa un modo differente per gestire i task, che vengono definiti di tipo non atomico, quindi interrompibili.

Quote

E poi uso la Libreria GLCD (quella presente anche sul Playground) che non so se usi qualche timer...

Link?

astrobeed


Siccome è uno scheduler molto primitivo e siccome è stato scritto per non appesantire il sistema,


A quando il LeOs 2.0 Plus ?  :smiley-mr-green:

leo72



Siccome è uno scheduler molto primitivo e siccome è stato scritto per non appesantire il sistema,


A quando il LeOs 2.0 Plus ?  :smiley-mr-green:


Ci ho pensato, e tanto.
Quello che mi ferma sono le seguenti 2 cose:
1) per fare uno scheduler di tipo preemptive (non mi piacciono quelli cooperativi) devo creare tutto un meccanismo di semafori e salvataggio dello stack per saltare da un task all'altro che vado a snaturare lo spirito con cui era nato il leOS: semplicità d'uso (ad oggi, lo includi come una lib e lo usi senza dover conoscere la programmazione ad oggetti tipica invece dei sistemi più complessi in circolazione) e leggerezza (l'ho usato su Tiny85 e 84 nonché su 168/328 ma anche su chip più capienti come il 644/1284).
2) ci sono un sacco di alternative in circolazione: avr-os, celina, Nil OS, ChibiOS/RT, FreeRTOS, SCoop, FemtoOS, per citare solo quelli opensource compatibili con l'Arduino che mi vengono in mente. A che pro farne un altro?

astrobeed


Go Up