Sie RAM überprüfen können statische Verwendung avr-size
Dienstprogramm, decribed wie 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,
und http://letsmakerobots.com/node/27115
avr-size -C -x Filename.elf
(avr-size Dokumentation: http://ccrma.stanford.edu/planetccrma/man/man1/avr-size.1.html)
Folgt ein Beispiel dafür, wie diese auf einer IDE zu setzen: auf Code :: Blocks, Projekt -> Optionen Erstellen -> Pre/Post Schritte bauen -> Post-Erstellungsschritte umfassen:
avr-size -C $(TARGET_OUTPUT_FILE)
oder
avr-size -C --mcu=atmega328p $(TARGET_OUTPUT_FILE)
Beispielausgabe am Ende Baujahr:
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)
Daten sind Ihre SRAM-Nutzung, und es ist nur der Betrag, der der Compiler bei der Kompilierung kennt. Sie brauchen auch Platz für Dinge, die unter Runtime (insbesondere Stack-Nutzung) erstellt wurden.
Um Stackverbrauch (dynamischer RAM) zu überprüfen, von http://jeelabs.org/2011/05/22/atmega-memory-use/
Hier ist ein kleines Programm, Funktion, wie viel RAM bestimmt ist derzeit nicht verwendet:
int freeRam() {
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}
Und hier ist eine Skizze, die Code verwendet:
void setup() {
Serial.begin(57600);
Serial.println("\n[memCheck]");
Serial.println(freeRam());
}
Die Funktion freeRam() gibt zurück, wie viele Bytes zwischen dem Ende von th vorhanden sind e Heap und der letzte belegte Speicher auf dem Stack, so ist es effektiv, wie viel der Stack/Heap wachsen kann, bevor sie kollidieren.
Sie könnten die Rückgabe dieser Funktion um Code überprüfen, von dem Sie vermuten, dass er Stapel/Heap-Kollision verursacht.
Wow. Sie müssen die einzige Person sein, die jemals Malloc auf einem Atmega verwendet hat. Ich bin überrascht, dass sie überhaupt funktionieren! Das war noch nie so, dass man es miteinbezieht. – Myforwik