Pages: [1]   Go Down
Author Topic: Problemi di Flash  (Read 509 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 175
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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? ...
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9158
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 175
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9158
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 175
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@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.
Logged


Offline Offline
Full Member
***
Karma: 0
Posts: 175
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

tutto a posto ok ...facevo qualche stupidaggine io smiley 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 smiley
Logged

Pages: [1]   Go Up
Jump to: