Pages: 1 ... 28 29 [30] 31   Go Down
Author Topic: leOS - un semplice OS per schedulare piccoli task  (Read 30772 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Faraday Member
**
Karma: 39
Posts: 5611
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hai letto questo commmento sul sito da te indicato ?
Quote
AnonymousJanuary 2, 2013 2:28 AM
You can put a 470K resistor between the AREF and A1 to fix the watchdog timer issue.

Se e' vero e' utile per chi vuole lasciare la scheda con il BL originale
Logged

- [GUIDA] IDE1.x - Nuove Funzioni - Sketch Standalone - Bootloader - VirtualBoard
http://arduino.cc/forum/index.php/topic,88546.0.html
- [LIBRERIA] ST7032i LCD I2C Controller Library
http://arduino.cc/forum/index.php/topic,96163.0.html

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

hai letto questo commmento sul sito da te indicato ?
Quote
AnonymousJanuary 2, 2013 2:28 AM
You can put a 470K resistor between the AREF and A1 to fix the watchdog timer issue.

Se e' vero e' utile per chi vuole lasciare la scheda con il BL originale
E come risolverebbe la cosa, questa R?
Logged


Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 104
Posts: 6626
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sembra il rimedio di uno stregone.  smiley-eek
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2759
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Lo so bene che esiste un boot da flashare, l'avevo fatto sulla mega ADK che ora non ho più.
Non è giusto che io debba comprare un altro arduino o accessorio per fare connessioni ISP e robe varie.
Mi prenderò la Due e la Mega la mando a fare in ....  smiley-grin smiley-grin

Grazie per l'interessamento

ciao
Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2759
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hai letto questo commmento sul sito da te indicato ?
Quote
AnonymousJanuary 2, 2013 2:28 AM
You can put a 470K resistor between the AREF and A1 to fix the watchdog timer issue.

Se e' vero e' utile per chi vuole lasciare la scheda con il BL originale

L'ho fatto 10 gg fa quando pasticciavo la Leos, mi sono detto che centra A1 con watchdog timer, però preso da raptus l'ho provato  smiley-grin non cambia nulla.

L'avevo trovato qui http://www.desert-home.com/2012/05/arduino-mega2560-wrapping-up-bootloader.html cercando "watchdog  reset"
« Last Edit: January 12, 2013, 08:33:18 am by pablos » Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sembra il rimedio di uno stregone.  smiley-eek
Quando la luna è piena, a mezzanotte esatta, prendi un C da 0.1uF, una R da 100K e poi recita la preghiera:
"unga bunga unga bunga la resistenza è tonda il condensatore non torna"
Logged


Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 104
Posts: 6626
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Un altro RTOS --> https://github.com/CelinaRTOS/Celina  smiley-sad
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bene, vuol dire che l'argomento interessa.  smiley-wink
Logged


Offline Offline
Edison Member
*
Karma: 24
Posts: 2032
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bene, vuol dire che l'argomento interessa.  smiley-wink
Ehi Leo fai la persona leale niente virus per il nuovo arrivato  smiley-yell
Logged

"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bene, vuol dire che l'argomento interessa.  smiley-wink
Ehi Leo fai la persona leale niente virus per il nuovo arrivato  smiley-yell
Ancora  smiley-twist
Ma la tua è una fissa eh  smiley-grin
Logged


Offline Offline
Edison Member
*
Karma: 24
Posts: 2032
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bene, vuol dire che l'argomento interessa.  smiley-wink
Ehi Leo fai la persona leale niente virus per il nuovo arrivato  smiley-yell
Ancora  smiley-twist
Ma la tua è una fissa eh  smiley-grin
Non lo faccio più scusa però non inviarmi nessun virus  smiley-yell
si cosi la smetti di vantarti  smiley-mr-green
ps naturalmente scherzo  smiley-grin
Logged

"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

0
Online Online
Faraday Member
**
Karma: 24
Posts: 2829
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

L'altro giorno mi è venuta in mente una visione pazza, (si lo so mi capita e ormai ci ho fatto l'abitudine).

Io ho codice C simile al LeoOS, però uso una linked list per i task, quindi volendo posso anche inserire un task tra due task e ovviamente li posso anche spostare. Spostarli non comporta l'esecuzione di un task perchè esso dipende dal tempo che scorre, ma li si potrebbe ordinare in base ad valore appartenente al task, come avviene per i processi unix dove c'è il "nice".

La pensata pazza è stata quella di non realizzare per forza task a tempo ma anche task immediati e ogni task fa capo ad una macchina a stati, la pensata pazza è stata quella di inserire un task (task1) tra due (task0 e task1) che una volta eseguito elimina il task precedente o seguente a secondo di cosa c'è scritto nel task appena inserito. I task instantanei vengono eseguiti subito e possono modificare l'ordine di esecuzione dello "scheduler".

Non ho ancora ben chiaro dell'utilizzo di questa cosa, ma mi chiedevo con LeoOS posso inserire un task tra due o rimovere il primo e via discorrendo?

Perchè avrei intenzione di giocare un po con C++ le classi ecc usando LeoOS come base per i miei esperimenti folli.

Ciao.
Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10115
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

se non ricordo male il LeoOS calcola il tempo necessario per eseguire il task, e se inferiore al tempo di attesa attuale viene settato il "trigger" di conseguenza.

Quindi all'avviarsi del trigger si cercano tutti i task che soddisfano la condizione (indipendentemente dalla posizione, anche se creare un'array/lista ordinata è semplice) e li esegue.

sono a "disfavore" dell'uso della lista, meglio un array dinamico con malloc/realloc (ho postato del codice mese scorso), ed inserimento ordinato (come per la tua lista)
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Il leOS ed il leOS2 funzionano basandosi su un contatore hardware (timer o watchdog) che viene usato per generare un interrupt ad intervalli regolari (1 ms col leOS, 15/16 ms col watchdog nel leOS2).

Quando il timer va in overflow, viene incrementata una variabile che misura lo scorrere del tempo secondo l'unità e controlla, tutte le volte che viene chiamata l'ISR, se c'è un task che ha il tempo di attivazione uguale al valore attuale. Se sì, viene chiamata la corrispondente routine, poi il controllo torna allo scheduler, che prosegue l'analisi nell'elenco dei task.
Al termine, si esce dalla ISR.

La priorità di controllo è fatta sullo stato del task, se sospeso o eseguibile.
In caso sia sospeso, si passa al successivo. Se è invece eseguibile, si controlla se è venuto il suo tempo e, nel caso, viene eseguito. Quando il task termina, si controlla se era un task di tipo ONETIME, nel caso viene cancellato dallo scheduler, e la lista ricompattata in modo da non dover controllare celle della stessa vuote nelle successive chiamate dello scheduler.

I task vengono aggiunti allo scheduler a seconda del loro ordine di inserimento, per cui il task A, se inserito prima del task B, a parità di tempo di intervallo, sarà sempre eseguito prima di quest'ultimo.

Si può inserire un task tra 2 task già presenti perché appunto lo scheduler controlla tutte le volte l'elenco e non esegue solo il primo della lista.

Anzi, mauro, il tuo post mi ha fatto venire in mente che si potrebbe prevedere un valore di "nice" in modo che se due task arrivano ad essere eseguibili nello stesso istante, lo scheduler scelga quello con un valore di nice superiore.
Questo può capitare anche con 2 task che hanno intervalli differenti (minimo comune multiplo). Ad esempio, un task inserito per essere eseguito ogni 300 ms ed un task inserito per girare ogni 1000 ms, dopo 3000 ms saranno eseguibili nello stesso istante.
Logged


Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21669
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

sono a "disfavore" dell'uso della lista, meglio un array dinamico con malloc/realloc (ho postato del codice mese scorso), ed inserimento ordinato (come per la tua lista)
Sempre che questo non impatti negativamente sulle performance.
Tempo fa mi furono dati dei suggerimenti sul forum internazionale. Alcuni li ho seguiti, altri no. Quelli che non ho seguito, non l'ho fatto o per mia carenza di conoscenze del C/C++ o perché, all'atto pratico, mi aumentavano il consumo di risorse de leOS. Siccome il leOS gira anche su piccoli Tiny, l'impatto sulla Flash e/o RAM ha la priorità sull'eleganza del codice.
Logged


Pages: 1 ... 28 29 [30] 31   Go Up
Jump to: