Nella settimana passata ho lavorato con la eth shield ufficiale su IDE 1.0 e mi piacerebbe condividere con voi alcune cose, sperando in qualche opinione di confronto
Parliamo del watchdog.
Ho messo su la eth shield con web client e web server ed ho notato che, dopo diverse ore di funzionamento impeccabile, iniziavano a manifestarsi freeze o lag nelle risposte del web server.
Ho cercato in rete ed ho trovato che è un problema comune della shield.
A tal proposito si implementa un controllo (watchdog) che reinizializza la scheda ogni (x) ripristinandone il corretto funzionamento.
Al momento sto lavorando con due tipi di watchdog, mi piacerebbe sapere la vostra opinione in merito.
Ora come ora il web server è up da circa 20 ore senza nessun problema. Prima si freezava dopo due o tre ore. Quindi non ho problemi di codice al momento ma apprezzerei cmq un confronto per imparare, magari, una soluzione migliore.
Primo watchdog.
Ogni x cicli reinizializzo la eth shield con questo codice, facendolo eseguire in una parte del programma sicura, per non bloccare eventuali connessioni.
void resetEthernetShield(){
delay(100);
Serial.println(F("Resetting Ethernet Shield."));
Ethernet.begin(mac,ip,dns,gateway,subnet);
server.begin();
delay(100);
}
E questo è ok credo, da quando l'ho messo il server non si è mai congelato.
Oltre a questo primo watchdog resetto il micro ogni 60 minuti, sempre avviando il reset in una parte di codice sicura.
Il reset software lo avvio con questo codice.
if ( watchdogtimer >= 60 ){ // resetta il micro ogni 60min
delay(10);
void (*softReset) (void) = 0; //declare reset function @ address 0
softReset();
}
Ora, sebbene tutto sembri funzionare senza problemi avrei qualche domanda.
Comprendo la funzione di reinizializzazione della eth shield ma ammetto di usare la funzione di soft reset senza comprenderla veramente. In vari forum affermano che è utilissima per evitare problemi alla eth shield.
La mia prima domanda è... crea danni? posso danneggiare qualcosa usando quella funzione?
Seconda domanda, 60 minuti è un tempo adeguato?
Voi che tempi usate per il watchdog e tenere un micro sempre "in condizioni ottimali" su lunghi periodi?
6 ore? 24 ore? 1 settimana?
Terza domanda: voi come gestite il vostro watchdog su progetti che devono rimanere up per molti mesi?
Vorrei evitare modifiche hardware (ne ho lette diverse) o custom bootloader (tipo quello di ladyada).
Ultima domanda, conoscete "l'issue 605" ?
http://code.google.com/p/arduino/issues/detail?id=605
Ha senso implementare la patch? Il mio codice del web server sembra funzionare comunque...
Utilizzo paro paro quello di ladyada per IDE1.0