Reset Arduino

Buonasera a tutti.
L'applicazione che sto implementando utilizza al suo interno un modulo GPRS ed ogni tanto tutto il sistema si blocca per cause a me sconosciute.

E' possibile attraverso un modulo RTC (dispongo di un DS3231) "resettare" arduino a intervalli di tempo prefissati? (in questo modo sono sicuro che in caso di blocco, entro l'intervallo prefissato il sistema torna a funzionare).

Dagli articoli che ho letto penso che bisogna utilizzare gli "interrupt" abbinati agli "allarmi" dell'RTC ma non ne sono venuto a capo.

Grazie a tutti.
Ciao, Giuliano.

... a voi v'ha rovinato Windows ed il suo CTRL-ALT-DEL ! :smiling_imp:

I problemi si risolvono, non si aggirano con un reset ... se il software regolarmente si blocca un motivo ci sarà, occorre fare DEBUG e trovare le cause, non mettere una reset !

Guglielmo

P.S.: E se usi la classe String continuando a assegnare e riassegnare valori a oggetti String ... è piuttosto facile che il programma di blocchi perche la SRAM è esaurita!

Meglio indagare sulla causa e correggere la causa del problema che in modo malcomcio tamponare i sintomi.
Ciao Uwe

Buonasera e grazie del commento.

Il software non si blocca regolarmente... ma "ogni tanto".
In fase di trasmissione con il gprs qualche volta si impalla. Dato che non è un evento regolare non sono riuscito a determinarne la causa.

Per quanto riguarda l'oggetto "string", effettivamente viene usato ma sinceramente non conosco un'alternativa (sono ancora "beginner").

Ringrazio
Saluti
Giuliano

se proprio vuoi raggirare il problema con un reset nel caso arduino si blocchi puoi usare il WDT (Watchdog timer) trovi diversi esempi su internet su come usarlo.

JulianusGM:
Per quanto riguarda l'oggetto "string", effettivamente viene usato ma sinceramente non conosco un'alternativa (sono ancora "beginner").

Ringrazio
Saluti
Giuliano

Array di char.

Il software non si blocca regolarmente… ma “ogni tanto”.
In fase di trasmissione con il gprs qualche volta si impalla. Dato che non è un evento regolare non sono riuscito a determinarne la causa.

Sei sicuro che non hai un problema di alimentazione?
Ciao Uwe

Buondì.

Il problema di alimentazione lo escludo con un certo grado di sicurezza, in quanto il modulo GPRS è alimentato esternamente con un alimentatore dedicato 5V-2A (la potenza dell'alimentatore è in linea con le richieste dichiarate dal costruttore della scheda).

Non mi è invece ben chiaro la questione delle stringhe menzionata da Guglielmo, ossia:

"E se usi la classe String continuando a assegnare e riassegnare valori a oggetti String ... è piuttosto facile che il programma di blocchi perche la SRAM è esaurita!"

Significa che quando riassegno valori a String, non vengono cancellati i valori precedenti? E' così? E' necessario in qualche modo "azzerare" la String prima di riassegnare un nuovo valore?

Ringrazio
Ciao, Giuliano

NON sei su un PC dove c’è un sistema operativo ed un “garbage collector”, sei su una piccola MCU con solo 2KBytes di SRAM, dove devi fare tutto tu e dove usare la classe “String”, a causa dell’allocazione e riallocazione dinamica della memoria, porta quasi sempre … a grossi problemi e sicuri mal di testa !!! :smiling_imp:

Impara ad usare le stringhe classiche del C … ovvero semplici array di char terminati dal carattere null (0x00) e le funzioni che trovi nella libreria standard (… che, oltretutto, è automaticamente inclusa dal IDE) AVR libc ed, in particolare, quanto è in <string.h>.

Guglielmo

P.S.: E se proprio proprio, mentre studi le stringhe classiche del ‘C’, vuoi tamponare il problema, almeno prealloca la memoria massima che il tuo oggetto String() usa, tramite l’apposito metodo reserve()

...sul mal di testa ti do ragione :confused: .
Nei prossimi giorni mi studio i links che mi hai inviato e casomai mi rifaccio vivo (...molto probabile).

Buona giornata.
Ciao, Giuliano.