Continui blocchi del programma

Ciao ragazzi, piu' il mio codice diventa lungo piu' sto riscontrando un fastidiosissimo problema:
Il programma (il cui svolgimento l'osservo dal monitor seriale) si blocca! puo' bloccarsi dopo 10 secondi come dopo 5 minuti...
Per blocco intendo che anche le linee di testo del monitor seriale si bloccano.
Se chiudo il monitor seriale e lo riapro, correttamente riparte tutto.

Avete esperienze simili?
Puo' un codice che supera la fase di compilazione, bloccare totalmente il programma da un momento all'altro?
Puo' c'entrare il settaggio Serial.begin() ? sembra che succeda piu' spesso se utilizzo 115200..

Grazie in anticipo!

ciao

aldoz:
...Puo' un codice che supera la fase di compilazione, bloccare totalmente il programma da un momento all'altro?

Certo che può, basta che ti consumi tutta la RAM del micro.

A parte questo senza altre informazione (che arduino usi, sketch) più che sparare a caso non si può fare.

ciao
pippo72

pippo72:
ciao

Certo che può, basta che ti consumi tutta la RAM del micro.

A parte questo senza altre informazione (che arduino usi, sketch) più che sparare a caso non si può fare.

ciao
pippo72

Ciao pippo e grazie per la risposta.
L'arduino e' la MEGA2560 e lo sketch e' molto lungo.. non chiedo tanto.
Diciamo che da quando sto usando il codice che gestisce il giroscopio MPU6050 sto riscontrando un sacco di problemi

ciao aldoz

Non ho esperienza nè con la MEGA2560 nè con la MPU6050.
Se volessi verificare l'ipotesi che ho fatto, visto che già usi la seriale puoi usare la funzione freeRam descritta in questo articolo di Leo72

ciao
pippo72

pippo72:
ciao aldoz

Non ho esperienza nè con la MEGA2560 nè con la MPU6050.
Se volessi verificare l'ipotesi che ho fatto, visto che già usi la seriale puoi usare la funzione freeRam descritta in questo articolo di Leo72

ciao
pippo72

mmm interessante! ti faro' sapere! grazie

Hai usato la macro F()?

Serial.Print(F("testo"));

Ciao Uwe

aldoz:
Ciao ragazzi, piu' il mio codice diventa lungo piu' sto riscontrando un fastidiosissimo problema:
Il programma (il cui svolgimento l'osservo dal monitor seriale) si blocca! puo' bloccarsi dopo 10 secondi come dopo 5 minuti...

Molto probabile che sia colpa della I2C, su Arduino è bloccante in caso di errori.

Grazie per l'aiuto ragazzi!

@uwefed:

Hai usato la macro F()?

Serial.Print(F("testo"));

mmm in effetti uso alcuni print con l'F e altri senza..
ma mi sembra assurdo che io stia succhiando troppa ram della mega2560.. mmmmm

@astrobeed:

Molto probabile che sia colpa della I2C, su Arduino è bloccante in caso di errori.

Questa e' un altra cosa interessante!.
Prima di tutto utilizzo 2 dispositivi con l2c (quindi magari gia' questo crea un po di problemi?)
e poi, cosa intendi per "e' bloccante in caso di errori"? di quali errori parli? errori nel codice?

aldoz:
e poi, cosa intendi per "e' bloccante in caso di errori"? di quali errori parli? errori nel codice?

Sia nel codice che errori sul bus I2C, sempre possibili, in tutti e due i casi Arduino rimane bloccato sul ciclo di gestione I2C, unico modo per sbloccarlo è il reset a meno di non modificare le routine di gestione della I2C e renderle non bloccanti.

astrobeed:
Sia nel codice che errori sul bus I2C, sempre possibili, in tutti e due i casi Arduino rimane bloccato sul ciclo di gestione I2C, unico modo per sbloccarlo è il reset a meno di non modificare le routine di gestione della I2C e renderle non bloccanti.

Ah ecco, oltretutto sto utilizzando la libreria I2Cdev.h .. che non sia la l'errore?
E quanto vorrei che fosse semplice modificare le routine di gestione della l2c per renderle non bloccanti.. :sob:

Ci sono esempi a riguardo? e quali problematiche comporterebbe (se ne comportasse) avere l'l2c non bloccabile?

aldoz:
Ah ecco, oltretutto sto utilizzando la libreria I2Cdev.h .. che non sia la l'errore?

So cosa sono però non le ho mai usate quindi non so dirti se hanno problemi o meno, toccherebbe verificare il codice.

E quanto vorrei che fosse semplice modificare le routine di gestione della l2c per renderle non bloccanti..

Per la librerie Wire di Arduino c'è già il codice modificato non bloccante, se fai un ricerca sul forum italiano c'è un corposo topic dedicato all'argomento.
Il codice I2C non bloccante dovrebbe essere un must e non un'opzione, è una cosa che avevo segnalato come issue di Arduino diversi anni fa, però nessuno degli sviluppatori l'ha presa in considerazione, questo è uno dei più gravi difetti di Arduino, è impensabile che il sistema va in blocco per colpa di un errore sul bus I2C.

astrobeed:
So cosa sono però non le ho mai usate quindi non so dirti se hanno problemi o meno, toccherebbe verificare il codice.

Per la librerie Wire di Arduino c'è già il codice modificato non bloccante, se fai un ricerca sul forum italiano c'è un corposo topic dedicato all'argomento.
Il codice I2C non bloccante dovrebbe essere un must e non un'opzione, è una cosa che avevo segnalato come issue di Arduino diversi anni fa, però nessuno degli sviluppatori l'ha presa in considerazione, questo è uno dei più gravi difetti di Arduino, è impensabile che il sistema va in blocco per colpa di un errore sul bus I2C.

molto molto bene!
Io sto utilizzando sia la libreria l2cdev ma anche la libreria wire! Ora mi metto subito a cercare il codice modificato! grazie 1000 astrobeed!