Problemi di Flash

Ciao a tutti ho un problema nel funzionamento di uno sketch ...fintanto che ho un occupazione di flash di 21.140 bytes tutto ok ...non appena supero 25 k ha un comportamento strano ovvero lo stesso codice pare che faccia riavviare ogni n secondi l'Arduino infatti nel debug sulla serial ritrovo il messaggio di scrittura sulla serial che faccio nel setup. Pensavo di utilizzare la eprom solo che non so come si fa? ...

lollo1100:
Ciao a tutti ho un problema nel funzionamento di uno sketch ...fintanto che ho un occupazione di flash di 21.140 bytes tutto ok ...non appena supero 25 k ha un comportamento strano ovvero lo stesso

Non può essere un problema di flash, è sicuramente un problema legato all'uso della ram e/o un overflow dello stack/heap.

astrobeed:

lollo1100:
Ciao a tutti ho un problema nel funzionamento di uno sketch ...fintanto che ho un occupazione di flash di 21.140 bytes tutto ok ...non appena supero 25 k ha un comportamento strano ovvero lo stesso

Non può essere un problema di flash, è sicuramente un problema legato all'uso della ram e/o un overflow dello stack/heap.

Cioè ??? come mai fa una cosa del genere non appena occupa 22 k o + mi riscrive la frase scritta sul setup è un codice per un touch shield che utilizza il mpr121 della freescale

lollo1100:
Cioè ??? come mai fa una cosa del genere non appena occupa 22 k o + mi riscrive la frase scritta sul setup è un codice per un touch shield che utilizza il mpr121 della freescale

Non importa quanto è l'occupazione della flash, devi solo rimanere sotto il limite massimo, quello che può mandare in crash il micro è ciò che fa il programma, non la sua lunghezza.

astrobeed:

lollo1100:
Cioè ??? come mai fa una cosa del genere non appena occupa 22 k o + mi riscrive la frase scritta sul setup è un codice per un touch shield che utilizza il mpr121 della freescale

Non importa quanto è l'occupazione della flash, devi solo rimanere sotto il limite massimo, quello che può mandare in crash il micro è ciò che fa il programma, non la sua lunghezza.

se vuoi ti posso mandare lo sketch x e mail magari c'è qualcosa che non va...il fatto che adesso ho fatto uno sketch in cui ho solo la funzione dimmer. Questa la faccio scegliere in fase di configurazione del mio Arduino Client tramite un flag se è 0 on/off se è 1 dimmer quindi nel loop devo mettere il codice per verificare la pressione dei pad del tastierino nelle 2 condizioni in quel caso mi crea macello con la possibilità del doppio valore del flag. Ho un codice identico con il tastierino di Arduino quello normale HIGH & LOW e funziona che è una meraviglia :slight_smile:

@lollo:
i microcontrollori sono basati su un'architettura Harvard, dove la RAM in cui sono gestite le variabili del programma è una memoria separata dalla Flash che ospita il codice.
La RAM è di piccole dimensioni e può capitare di esaurirla in tempi brevi.

Ad esempio, una cosa che i principianti non sanno è che una stringa stampata su seriale o su Lcd col comando Serial.println("ciao"), viene prima copiata in RAM e da lì prelevata e spedita all'output. Anche un array creato dinamicamente può consumare tutta la RAM (basta dimensionarlo in modo che sfori il quantitativo disponibile). Oppure un algoritmo ricorsivo (salti a sé stesso) può esaurire la memoria.
Questo comporta che anche un programma di pochi kB di occupazione di Flash può occupare tutta la RAM.
Ti suggerisco la lettura di questa guida che ho fatto, dove trovi un paio di modi per sapere l'occupazione di RAM del tuo programma.

tutto a posto ok ...facevo qualche stupidaggine io :slight_smile: ora funziona tutto perfettamente. Grazie anche x i vostri consigli, ma evidentemente facevo qualcosa di sbagliato da qualche parte nel loop ora va che è una meraviglia :slight_smile: