dopo qualche giorno si blocca

ragazzi sono ancora qui
il mio arduino uno r3 conenc28j60 con codice in allegato, dopo qualche giorno di funzionamento si blocca

quando si verifica il blocco risponde cmq al ping ma non riesco piùa visualizzare la pagina web

cosa posso fare?

per sito.txt (12.1 KB)

Comprati una Ethernet con un W5100

Presupposto che non sia una problema di Ram

  1. Proverei ad assegnargli un IP fisso, invece del DHCP
  2. Abilitare il Watchdog
  3. Fare un SoftReset periodicamente ( ad esempio alle due del mattino )

Brunello:
Presupposto che non sia una problema di Ram

  1. Proverei ad assegnargli un IP fisso, invece del DHCP
  2. Abilitare il Watchdog
  3. Fare un SoftReset periodicamente ( ad esempio alle due del mattino )

Nel caso che sia proprio un problema di RAM esaurita??

grazie a tutti
diciamo che sono al limite con la ram

se avete qualche idea per ottimizzare il tutto ve ne sarei grato

intanto studio il Watchdog

p.s.
ho visto che con Watchdog posso arrivare solo fino a 8 secondi
io lo vorrei fare 1 volta ogni 2 gg. come posso fare?

  1. studiati bene il watchdog. Quello resetta se nel tempo stabilito non viene resettato/chiamato dallo sketch.
  2. Comprati un W5100
  3. Comprati un Arduino MEGA

Ciao Uwe

uwefed:

  1. studiati bene il watchdog. Quello resetta se nel tempo stabilito non viene resettato/chiamato dallo sketch.
  2. Comprati un W5100
  3. Comprati un Arduino MEGA

Ciao Uwe

ho sia la w5100 che il mega ma ho già fatto tutto con l'uno e non vorrei rifare tutto (problemi di spazio)

la mia domanda sul Watchdog è: ma se si impalla tutto anche il Watchdog non funziona?

No, il watchdog funziona indipendentemente da tutto ed ha un suo clock ...
... se così non fosse mi dici a cosa servirebbe ? ? ? :o :o :o

Guglielmo

quindi è giusto così?

#include <avr/io.h>
#include <avr/wdt.h>

.......

void loop()
{
wdt_enable(WDTO_8S);

................

}
wdt_reset();
} //end loop

NO,
l'enable NON lo fai nel loop(), ma lo fai una sola volta nel setup().

Da quel momento, con i parametro che tu usi, hai 8 secondi per dare un wdt_reset() o ... il tutto si resetta come se avessi premuto il tasto di reset.

Quindi, attivato il WD nel setup() ... nel loop() e/o in funzioni da esso richiamate, ti devi ricordare di chiamare la wdt_reset() perché, se entro il tempo stabilito non lo fai, il WD capisce che c'è un problema e resetta il micro.

Guglielmo

P.S.: Ogni volta ch fai wdt_reset() il conteggio degli 8 secondi riparte da zero

ok ci provo
grazie

invece per qualche byte in meno nessuna idea?

comunque l' uso del watchdog che vuoi fare é concettualmente sbagliato. Non ha senso usare il Watchdog per risolvere un problema di programmazione e di risorse hardware inadeguate per l' uso che si vuole fare.

Ciao Uwe

uwefed:
comunque l' uso del watchdog che vuoi fare é concettualmente sbagliato. Non ha senso usare il Watchdog per risolvere un problema di programmazione e di risorse hardware inadeguate per l' uso che si vuole fare.

Pienamente d'accordo con Uwe ...
... il watchdog è per situazioni di "emergenza" in cui, per un motivo "particolare" il micro ha perso il controllo. Usarlo per risolvere "errori di programmazione" è un ERRORE di per se ed è una pessima scelta.

Guglielmo