Watchdog.... lo usate ?

Altra domanda che mi girava in testa da un po':

Ma voi, nei vostri progetti definitivi, inserite sempre il Watchdog ?

Ovviamente intendo il "System Reset Mode", che provoca il reset dopo (ad esempio 1 secondo) se non avviene l'azzeramento con wdt_reset();.

Dipende; ci sono dei progetti dove è comodo tenere inserito il watchdog per ovvi motivi, altri dove un reset potrebbe causare problemi.

Nella maggior parte dei casi lo lascio, ma in un recente progetto composto da una coppia di servomotori l'ho rimosso (il reset di Arduino "azzera" la posizione dei servomotori, potenzialmente causando danni alle apparecchiature).

Lo si usa anche per Debug, ma personalmente preferisco il caro vecchio Serial.print per capire se e dove il ciclo si interrompe o ha problemi

c0rsa1r:
Dipende; ci sono dei progetti dove è comodo tenere inserito il watchdog per ovvi motivi, altri dove un reset potrebbe causare problemi.

Premesso che l'uso del watchdog va sempre valutato caso per caso, però se avviene un reset avviato dal watchdog vuol dire che c'è un reale problema software o hardware.
Un esempio classico è la gestione I2C di Arduino che è bloccante in caso di errori sul bus, senza watchdog c'è il reale rischio di trovarsi col programma in un loop perenne di attesa, cosa facilmente ovviabile a software inserendo un time out per la I2C, non previsto di serie ma facilmente implementabile con poche righe di codice senza dover modificare la libreria.
Il watchdog degli AVR non prevede solo il reset, permette anche di far scattare il relativo interrupt senza resettare, in questo modo è possibile eseguire del codice nel tentativo di risolvere il problema ed eventualmente resettare solo se non c'è soluzione, oppure è possibile eseguire il codice all'interno del interrupt del watchdog e poi parte il reset
L'interrupt più reset è utilissimo nel caso in cui sia necessario salvare lo stato macchina, p.e. la posizione attuale dei servo, su EEPROM in modo da poter ripartire, dopo il reset, dal punto in cui ci si trovava.
Altro uso possibile del watchdog è come time base per un semplice scheduler, sistema usato da Leo nel suo LeOS2 e nel mio qRTOS.

Perfetto.
Grazie tantissimo :slight_smile:

@astro però concorderai che il wdt serva parecchio in uno scheduler.
Una simpatica idea è di trasformare il reset in un task, se non viene mai eseguito la mcu si resetta, ma se mi rubate il wdt...
Lo si può anche usare con scheduler preemptive, si imposta il task del reset in bassa priorità cosi si può vedere se la mcu è satura.
Insomma, meglio usarlo nel timer2 e se ti serve tone ti attacchi e cambi progetto!