È possibile controllare l'utilizzo statico RAM utilizzando avr-size
utilità, come misura descritto in
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=62968,
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=82536,
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=95638,
e http://letsmakerobots.com/node/27115
avr-size -C -x Filename.elf
(documentazione avr-size: http://ccrma.stanford.edu/planetccrma/man/man1/avr-size.1.html)
Segue un esempio di come impostare questo su un IDE: Su Code :: Blocks, Progetto -> opzioni di generazione -> pre/post costruire passaggi -> post-generazione passi, comprendono:
avr-size -C $(TARGET_OUTPUT_FILE)
o
avr-size -C --mcu=atmega328p $(TARGET_OUTPUT_FILE)
uscita esempio alla fine di costruzione:
AVR Memory Usage
----------------
Device: atmega16
Program: 7376 bytes (45.0% Full)
(.text + .data + .bootloader)
Data: 81 bytes (7.9% Full)
(.data + .bss + .noinit)
EEPROM: 63 bytes (12.3% Full)
(.eeprom)
dati è l'uso SRAM, ed è solo l'importo che il compilatore conosce al momento della compilazione. È inoltre necessario spazio per le cose create al runtime (in particolare l'utilizzo dello stack).
Per controllare l'utilizzo dello stack (RAM dinamica), da http://jeelabs.org/2011/05/22/atmega-memory-use/
Ecco una piccola funzione di utilità che determina la quantità di RAM è attualmente inutilizzata:
int freeRam() {
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}
Ed ecco uno schizzo utilizzando il codice:
void setup() {
Serial.begin(57600);
Serial.println("\n[memCheck]");
Serial.println(freeRam());
}
La funzione freeRam() restituisce quanti byte esiste tra la fine di th e heap e l'ultima memoria allocata nello stack, quindi è efficace la quantità di stack/heap che può crescere prima di collidere.
È possibile controllare il ritorno di questa funzione attorno al codice che si sospetta possa causare collisione stack/heap.
Wow. Devi essere l'unica persona ad aver mai usato malloc su un atmega. Sono sorpreso che lavorano affatto! Il mai usato per essere incluso. – Myforwik