Forum: Compiler & IDEs Wie liest man ein .m (memory map) file?


von Christian Widtmann (Gast)


Lesenswert?

Hallo!

Der Betreff ist schon die Frage: wie kann ich aus dem .m file die
statische bzw. dynamische Belegung des SRAM auslesen? Flash und EEPROM
werden mir ja von ZeusProg während der Programmierung angezeigt.
Allerdings kann ich mit den von unserem Institut zur Verfügung
gestellten MemEval-Routinen nur den gesamen SRAM-Verbrauch bestimmen,
der ja nicht zwischen statisch und dynamisch unterscheidet.

mfg
Christian

von Joerg Wunsch (Gast)


Lesenswert?

Am besten liest man ein .map File gar nicht. ;-)

Normalerweise ist die Symboltabelle (Ausgabe von avr-nm -n, beim
aktuellen WinAVR-Makefile auch in $(TARGET).sym abgespeichert) viel
sinnvoller zu lesen.  avr-size -A zeigt die Belegung ebenfalls an.
In der Symboltabelle ist die RAM-Belegung die Differenz zwischen
__bss_end und __data_start.

Aber: die ,,dynamische'' RAM-Belegung läßt sich mittels derartiger
Methoden nicht ermitteln.  Stellt sich ja erstmal die Frage, was für
Dich dynamisch belegter RAM ist.  Was Du mit malloc() anforderst, mußt
Du schon selbst wissen.  malloc-intern gibt es ein paar Variablen, mit
denen man zur Laufzeit (bspw. im Debugger) analysieren kann, wie viel
aktuell belegt ist.

Falls Du damit die Stackbenutzung meinst, kannst Du diese auch nicht
in statischer Form aus so einer Datei holen.  Woher sollten diese denn
wissen, wer wann wen aufruft, ob sich Funktionen gar ggf. rekursiv
aufrufen?  Das mußt Du schon selbst wissen.

Im generierten Assemblercode (avr-gcc -S) finden sich Kommentare, die
die Belegung der einzelnen Stackframes angeben.  Achtung, damit ist
ausdrücklich kein Disassembler gemeint, der kann logischerweise
keine Kommentare des Compilers mehr enthalten...  Diese Zahlen können
Dir zusammen mit Deinem Aufrufgraphen für die Funktionen angeben,
wieviel Stack durch all diese verbraucht wird.  Natürlich solltest Du
dabei die Interruptroutinen und die von denen gerufenen Funktionen
nicht vergessen...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.