PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : gefühlter Ram



manhunt
02.05.2009, 14:36
Hallo

Ich wollte einmal Fragen wie bekomme ich ein Gefühl dafür wie viel Ram ich gerade verbrauche (in der Software) weil ich es oft schwär einschätzen kann welchen controller ich benutzen soll bzw wo ich jetzt im Programm an zb Funktionsaufrufen sparen soll...

LG manhunt

yaro
02.05.2009, 14:46
Wenn du nicht allzuheftige Programme schreibst, dann sollte der RAM (SRAM) von 512Byte eigentlich ausreichen.
Aber wenn du dich so sehr daführ interessierst, gibt es 2 Möglichkeiten: Lerne Assembler und schau dir das compilierte Programm an, und zähl, wieviel gerade im SRAM gespeichert ist.
Oder: du lädst dir einen Debugger runter, und lässt dir zu allen möglichen Zeitpunkten anzeigen, wieviel gerade im SRAM steht.

Grüße, Yaro

thewulf00
02.05.2009, 15:42
Verwende am Ende des Compiliervorgangs einfach AVR-size, dann sagt er Dir genau, wieviel KB RAM du verwendest und wieviel % das von Deinem Controller ist.
Bei AVR-Studio mit GCC sollte das automatisch passieren, ansonsten muss es irgendwo eingestellt werden.

Bei mir sieht das z.B. heute so aus:

AVR Memory Usage
----------------
Device: atmega1280
Program: 6670 bytes (5.1% Full)
(.text + .data + .bootloader)
Data: 11 bytes (0.1% Full)
(.data + .bss + .noinit)


Der Teil mit "data" entspricht dem RAM.

manhunt
02.05.2009, 16:32
gibt avr size nicht einfach nur auskunft über auslasstung von flash und eeprom?

Ram auslastung ist ja dynamisch und kann ja nur zur Laufzeit benutzt werden...

lg manhunt

SprinterSB
02.05.2009, 18:37
Für die statische RAM-Analyse ist avr-size in Ordnung.

Um ein Gefühl für den dynamischen Speicherverbrauch zu bekommen (ohne malloc et al., brauch man für AVR eh nicht) mach ich das wie in
https://www.roboternetz.de/wissen/index.php/Speicherverbrauch_bestimmen_mit_avr-gcc
beschrieben.

Die notwendigen Routinen brauchen zwar auch etwas RAM, aber wenn man es geschickt macht nur ein paar Byte.

Der dynamische RAM-Verbrauch ist abhängig von der Verschachtelungstiefe der Funktionen, von deren Frame-Größe sowie von der Anzahl der zugelassenen Interrupt-Ebenen (in den meisten meiner Anwendungen brauch ich kaskadierende IRQs), welche sich auf die Stack-Größe auswirken.