Go Down

Topic: Occupazione Ram: Uno vs Mega (Read 534 times) previous topic - next topic

Testato

usando il ramo 1.5 dell'IDE si riceve alla compilazione oltre alla flash occupata anche la Ram usata.
Con mio stupore la differenza di valori tra Uno e Mega e' molto alta, specialmente nella Ram che compilando solo su Mega farebbe credere che non entri quel programma nella Uno, invece poi compilando con la Uno ci entra.

1) Da dove deriva tale differenza, (che in parte e' anche sulla occupazione flash) ?
2) Quel valore di Ram occupata indica solo matematicamente quello occupato dalle var globali ?

Thanks  :)

Mega
Quote
Sketch uses 24.288 bytes (9%) of program storage space. Maximum is 258.048 bytes.
Global variables use 2.313 bytes (28%) of dynamic memory, leaving 5.879 bytes for local variables. Maximum is 8.192 bytes.


Uno
Quote
Sketch uses 23.206 bytes (71%) of program storage space. Maximum is 32.256 bytes.
Global variables use 1.827 bytes (89%) of dynamic memory, leaving 221 bytes for local variables. Maximum is 2.048 bytes.
Low memory available, stability problems may occur

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

leo72

Test, ogni volta che scegli una piattaforma, devi pensare che il compilatore ha a che fare con una MCU differente.

Ora, io non so né che programma hai compilato né che cosa fa quel software, per cui così ad occhio posso dirti che nel caso del MEGA devi ragionare con una MCU che usa 3 byte per gli indirizzamenti e che quindi quando salva lo stack deve mettere 3 byte per i salti. Poi lib che usano diverse capacità della CPU mettono anch'esse più o meno dati in memoria, per cui altri dati che vengono immagazzinati. Tieni poi conto della seriale, che sulla MEGA sono 2 per cui raddoppi anche i buffer e tutte le routine di gestione ecc...

PaoloP

La MEGA ha 4 seriali, la Leonardo 2.  :smiley-mr-green:

m_ri

scusatemi, ma viene messo la parte per gestire le altre 3 seriali anche quando non le dichiaro nel programma?

leo72

Sì, giusto.
Mi sono sbagliato. Quindi ancora più RAM occupata solo per quello.

@m_ri:
non tutto, ma una parte del codice c'è perché disassemblando uno sketch che usa solo 1 seriale trovo dei riferimenti anche ad altre seriali.

PaoloP

La gestione delle SerialEvent si.
Poi se le dichiari il compilatore "sovrascrive" quelle vuote. --> http://www.html.it/pag/15502/l-overloading/

Testato

#6
Sep 13, 2013, 07:48 pm Last Edit: Sep 13, 2013, 09:31 pm by Testato Reason: 1
grazie Leo,
compilando l'esempio Dimmer ufficiale, sotto communication, si nota proprio il discorso sulle seriali, la ram occupata e' molto di piu' anche senza usarle tutte.

Ma perche' poi addirittura l'occupazione di flash e' doppia ?  :smiley-eek-blue:

Uno
Quote
Sketch uses 2.250 bytes (6%) of program storage space. Maximum is 32.256 bytes.
Global variables use 187 bytes (9%) of dynamic memory, leaving 1.861 bytes for local variables. Maximum is 2.048 bytes.


Mega
Quote
Sketch uses 4.264 bytes (1%) of program storage space. Maximum is 258.048 bytes.
Global variables use 673 bytes (8%) of dynamic memory, leaving 7.519 bytes for local variables. Maximum is 8.192 bytes.


perche' questo comando non altera il calcolo della ram ?
Code: [Select]
inputString.reserve(200);

Che significa di preciso questo calcolo indicato dal'ide 1.5 ?
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

PaoloP

Indica lo spazio occupato dalle variabili inizializzate e non inizializzate (.data  e .bss)


--> http://www.nongnu.org/avr-libc/user-manual/malloc.html

Go Up