Pages: [1]   Go Down
Author Topic: Chiarimenti su memoria  (Read 930 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve a tutti,

leggendo dal datasheet del'UNO c'è scritto;

Quote
Flash Memory   32 KB (ATmega328) of which 0.5 KB used by bootloader
SRAM   2 KB (ATmega328)
EEPROM   1 KB (ATmega328)

Quando compilo i sorgenti sotto compare qualcosa del tipo:

Quote
Dimensione del file binario dello sketch: 26.390 bytes (su un massimo di 32.256 bytes)

quindi la flash memory è stata occupata per 26K circa dei 32K giusto?

La SRAM per cosa viene usata? Se io ho dichiarato queste variabili

Code:
char ID[11];
char srvDNS[51];
char srvPORT[6];
int timeWait;
int numInterval;
char sms1[11];
char sms2[11];

dove vengono allocate? Grazie.
Logged

Selvazzano Dentro - Padova
Offline Offline
Edison Member
*
Karma: 44
Posts: 1390
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La SRAM viene occupata dallo HEAP (mucchio) e dallo STACK (catasta) più che altro.

Parole misteriose per definire l'area che contiene i valori delle variabili e quella che contiene i rinvii delle subroutine.

In realtà le cose sono un po' più complicate, ma dovrebbe bastarti come risposta.

Ettore Massimo Albani
Logged

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

e perché dovrebbe bastargli? mica sei tu a poter stabilire il limite del sapere di chi chiede smiley-wink così gli tagli ogni possibilità di approfondimento smiley-sad-blue D'altra parte solo ora faccio caso al tuo "personal text" smiley-twist; ricordando un battuta che mi hai fatto non molto tempo fa devo dedurre che non hai mai avuto un buon rapporto con la classe insegnante e temo proprio che il problema sia stato bidirezionale  smiley-yell
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

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 124
Posts: 9329
"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

Parole misteriose per definire l'area che contiene i valori delle variabili e quella che contiene i rinvii delle subroutine.

Nello stack vanno anche le variabili locali.
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 258
Posts: 21494
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Risposta piú semplice: Nella RAM vanno le variabili dello Sketch e le variabili del sistema (per esempio lo Stack). Lo stak é una parte di memoria dove per esempio vengono memorizzate dati come indirizzi di ritorno da subrotine) Non c'é controllo se si cerca di usare piú RAM di quella disponibile. Quando si usano tanti variabili (per esempio array) oppure si stampa sulla seriale tante stringhe vengono sovrascrite dalle variabili del Sketch l' aria riservata per le variabili di sistema e l' Arduino si blocca misteriosamente.

Arduino non usa normalmente la memoria EEPROM. Puoi usara Tu nel Tuo sketch con la libreria EEPROM
Nel ATmega328 non é possiblie espandere la memoria (RAM, o FLASH) esternamente per avere piú memoria interna per le variabili.
È possibile sulla ATmega1280 e 2560 di aggiungere una RAM esterna per avere 64kByte di RAm interna. Si perdono ca 20 piedini per questo. http://ruggedcircuits.com/html/megaram.html

Ciao Uwe
Logged

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

Per completare il discorso, esistono dei metodi per conoscere l'occupazione statica e dinamica della SRAM.
Si può vedere la memoria RAM usata staticamente (quindi come stack e creazione di variabili) dopo aver compilato il proprio sketch. Basta spostarsi nella cartella temporanea che l'Arduino crea in /tmp/buildxxxxxxxxxxxxxxxxxx (su Windows non mi ricordo dove la mette), aprire un terminale e dare "avr-size nome_file_sketch.elf -C".
Ti verrà restituita l'occupazione di flash e di Ram del tuo sketch.

A livello dinamico (ossia con lo sketch in esecuzione) puoi provare questo:
http://arduino.cc/playground/Code/AvailableMemory
Logged


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

Grazie a tutti. Solo ora ho avuto modo di leggere le vostre risposte. Devo provare con avr-size.

So cos'è un heap o uno stack. Una variabile dichiarata in una funzione vive solo in quella funzione? Cioè se dichiaro un array di 10 interi in questa funzione e nel loop() prima di chiamare questa funzione ho 100byte liberi dopo la funzione ne dovrei avere ancora 100 o no? Oppure tutto quello che viene dichiarato, comprese le variabili delle funzioni, viene allocato staticamente? Grazie.
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7079
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

x iscrizione
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Pages: [1]   Go Up
Jump to: