Pages: [1]   Go Down
Author Topic: Errore compilazione Arduino Duemilanove(ATmega328p) e sketch > 16kb  (Read 979 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve a tutti,
Ho uno sketch piuttosto grande ma che per l'Arduino che però dovrebbe entrare nel mio(duemilanove con 328p) e ho provato anche con un Arduino Ethernet.
Quando vado oltre ai 16k di memoria avrdude( se lo faccio da terminale) compila ma l'arduino non funziona, l'IDE mi dice che ho sforato di memoria dicendomi: "region data overflowed by 3246 bytes", ma dovrei avere 30kb circa per il mio programma, no?

per forzargli quest'errore ho creato un semplice sketch che alloca e inizializza degli array di float finchè arrivo quasi a 16 kb di memoria per il programma. aggiungendo anche un solo float di da quest'errore.

poi mi confonde una cosa: le variabili(gli array che ho inserito) vanno nella flash o nella SRAM? e quando l'ide mi dice i kb che sono stati scritti non differenzia tra quelli verso la SRAM e quelli verso la flash?
Poi per fare quest' overflow ho dovuto inserire array per la grandezza complessiva di 17000 float(più altro..) queste variabili come possono essere state salvate nella sram?
come posso risolvere questo problema?
grazie
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 564
Posts: 12457
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Il tuo problema riguarda certamente il fatto che hai superato la quantità di memoria ram disponibile. Gli array vanno certamente in ram, ma credo che la cosa riguardi i dati che contengono e non le righe che li generano; purtroppo non so aiutarti di più, ma ci sono esperti software che ti aiuteranno senz'altro. Certo sarebbe una cosa buona se tu riuscissi ad allegare un esempio di ciò che fai per ottenere questo errore.
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Newbie
*
Karma: 0
Posts: 40
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

uhm....potrebbe essere un problema di ram...ma non riesco a riprodurre qui l'errore (sono veramente tanti files). lo sketch che facevo riferimento prima mi dice che ottengo l'overflow della memoria, ma i byte scritti sono solo 950.

il fatto strano è che mi compila e carica il programma(attraverso terminale, non l'IDE che forse ha maggior controllo) ma se supero questi 16k di memoria poi non fa nulla....

mi sembra strano non possa sapere al download del codice quanta sram sto andando ad occupare...
se il problema è proprio della ram l'unica soluzione è spostare il più possibile sulla memoria flash con PROGMEM....
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 564
Posts: 12457
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

uhm....potrebbe essere un problema di ram...ma non riesco a riprodurre qui l'errore (sono veramente tanti files). lo sketch che facevo riferimento prima mi dice che ottengo l'overflow della memoria, ma i byte scritti sono solo 950.

il fatto strano è che mi compila e carica il programma(attraverso terminale, non l'IDE che forse ha maggior controllo) ma se supero questi 16k di memoria poi non fa nulla....

mi sembra strano non possa sapere al download del codice quanta sram sto andando ad occupare...
se il problema è proprio della ram l'unica soluzione è spostare il più possibile sulla memoria flash con PROGMEM....

Dunque, il limite di flash è noto ed il valore occupato te lo dà il compilatore; ora non ricordo bene, ma se superi il limite previsto dovrebbe uscire un errore specifico; quindi è normale che tu riesca ad infilare il firmware nel micro; è quando vengono allocati i dati in ram che succede il problema. Ti confermo che l'unica strada percorribile è il Progmem, la flash è comunque molto veloce, quindi il calo di prestazioni non sarà così evidente.
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Pages: [1]   Go Up
Jump to: