In allegato trovate un piccolo sketch che stampa alcune info sull'allocazione della SRAM del microcontrollore.
La memoria SRAM viene suddivisa in 5 pezzi:
- all'inizio della SRAM viene messa l'area .data, che contiene le variabili dichiarate nel programma
- dopo c'è l'area .bss/.init: essa contiene le variabili non inizializzate
- a seguire c'è l'HEAP, che contiene i dati per l'allocazione dinamica della memoria. L'HEAP cresce verso l'alto.
- dopo l'HEAP c'è un'area vuota che funge da "materasso"
- infine c'è lo STACK, collocato a partire dall'ultima locazione di memoria a crescere verso il basso, verso l'HEAP. Nello STACK ci vanno a finire non solo i punti di ritorno per i salti alle subroutine ma anche i registri di sistema durante le ISR nonché le variabili create localmente.
Sia lo STACK che l'HEAP si espandono nell'area materasso. Se queste 2 aree vengono a collidere sovrapponendosi, il micro crasha.
La memoria libera che lo sketch calcola è data dall'area compresa fra l'inizio dell'HEAP e l'inizio dello STACK.
Ovviamente potete inserire questo sketch in un vostro programma, ma anche infarcirlo di altre funzioni per vedere come i vari puntatori variano.
La funzione più importante è freeRam, pubblicata da JeeLabs, che può essere estrapolata per essere utilizzata in un proprio sketch.
Buonanotte ![]()
know_your_sram.ino (1.87 KB)