Go Down

Topic: leOS - un semplice OS per schedulare piccoli task (Read 42 times) previous topic - next topic

leo72

#405
Jan 03, 2013, 10:30 am Last Edit: Jan 03, 2013, 10:39 am by leo72 Reason: 1
Pablos, prova la versione allegata.
Ho riveduto la lib un po', aggiungendo maggiori setup per rendere l'operazione di disattivazione del WDT quanto più uguale a quanto scritto sul datasheet.

Se anche così non va, senza una MEGA in mano non so. L'unica alternativa che posso provare è la sostituzione della funzione di reset che ho scritto con il classico jump $0000 però preferivo il reset col WDT, perché è fatto a livello HW e quindi sicuramente più efficace di un semplice salto alla 1a istruzione del codice.

PS:
questa stessa versione funziona sulla Leonardo, che ha un bootloader che attende ben 8s prima di proseguire ma anche in questo caso viene resettato il watchdog subito.

pablos

Questo non lo inchioda subito, il pin 13 lampeggia per un po' 5-6 secondi poi si ferma rimane fisso e da li in poi si blocca, entro quei secondi però riesco a riscrivere lo sketch, immagino che poi faccia il reset e non si rianima più :)

Se non hai la scheda capisco che sia difficile ... bhe ci hai provato, grazie lo stesso


PS Ma per fare un reset ci vogliono tutte quelle istruzioni?  ....  :smiley-mr-green:

ciao 
no comment

leo72


Questo non lo inchioda subito, il pin 13 lampeggia per un po' 5-6 secondi poi si ferma rimane fisso e da li in poi si blocca, entro quei secondi però riesco a riscrivere lo sketch, immagino che poi faccia il reset e non si rianima più :)

Non so le tempistiche del bootloader della MEGA. Comunque, se con questa versione la scheda non si inchioda subito allora prova ad aumentare nella ruotine reset() il tempo di attesa con wdt_enable(WDTO_4S) oppure WDTO_8S) per esempio.

Quote

PS Ma per fare un reset ci vogliono tutte quelle istruzioni?  ....  :smiley-mr-green:

Tutte quelle istruzioni ci vogliono per poter modificare i parametri del watchdog: 1) in maniera tale che le modifiche siano prese (per alterare il WDT, devi prima scrivere ad uno logico 2 particolari bit del suo registro, dopodiché entro 4 cicli di clock modificare i bit che vuoi alterare); 2)senza che questo venga alterato in un modo tale che poi si metta a resettare la scheda di continuo il micro.

Poi, ripeto. Si può anche mettere un jmp$0000 e via, ma così non si ha un vero reset HW.
Cmq se puoi fare la prova che ti ho suggerito, mi faresti un piacere.

pablos

No niente nemmeno con quei 2 valori  wdt_enable(WDTO_4S) oppure WDTO_8S, si inchioda esattamente dopo 10 secondi penso a causa  questa linea

myOS.addTask(reset, myOS.convertMs(10000)); //add a task to be executed after 10 seconds

no comment

pablos

#409
Jan 03, 2013, 11:31 pm Last Edit: Jan 03, 2013, 11:59 pm by pablos Reason: 1
Che il wdt_enable(WDTO_4S); non funzionasse sulla mega già lo avevi affrontato ti ricordi di questa discussione?
http://arduino.cc/forum/index.php?topic=108620.0, magari c'e' qualche link che può servirti, sembrerebbe che bisogna caricare un altro bootloader
Comunque da quando leggo in giro, nessuno è riuscito a fare sto benedetto reset usando WDT sul 2560, senza toccare il bootloader

ciao
no comment

Go Up