Verificare SRAM utilizzata

Mi sono dimenticato di precisare una cosa.
Se avete lanciato lo sketch, avrete visto che la SRAM inizia all'indirizzo $100. Questo perché in realtà un microcontrollore possiede 256 byte ($100) di RAM in più, che però usa per le sue necessità: nei primi 160 256 byte vengono infatti salvati i registri interni del microcontrollore ed i registri che controllano le linee di I/O. Poi inizia la RAM destinata ai dati del programma, che parte da $100 appunto e termina a $RAMEND, che varia a seconda del micro. Nel caso dell'Atmega328, che ha 2048 ($800) byte di RAM disponibile per i dati, la fine è a ($100+$800-$1)=2303 ($8FF). Questo indirizzo rappresenta anche la cella più alta dello STACK.

Ecco l'output del mio Arduino UNO:

SRAM and .data space start: 256 $100
.data space end/.bss start: 456 $1C8
.bss space end/HEAP start: 641 $281
HEAP end: 654 $28E
STACK start: 2241 $8C1
STACK and SRAM end: 2303 $8FF
Free memory at the moment: 1600 $640

Questo invece l'output della mia Leonardo:

SRAM and .data space start: 256 $100
.data space end/.bss start: 482 $1E2
.bss space end/HEAP start: 601 $259
HEAP end: 614 $266
STACK start: 2753 $AC1
STACK and SRAM end: 2815 $AFF
Free memory at the moment: 2152 $868

Qui ci sono 512 byte di memoria in più (2303+512=2815).