Forum: Compiler & IDEs Wie kann ich Ram/Rom Verbrauch der Module aus dem elf File extrahieren?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Lukas Hönnighausen (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe aktuell mehrere embedded Compiler die mir jeweils Object files 
und das dazugehörige executable generieren, alle Daten sind im elf 
Format.
Aus diesen Dateien würde ich gerne den Ram und Rom Verbrauch der 
einzelnen Module auslesen.
Die meisten Compiler liefern ein .map file mit, dass diese Informationen 
bereitstellt. Ich würde allerdings nur ungern für jeden Compiler einen 
eigenen Parser schreiben, sondern die Daten lieber mithilfe der Binutils 
aus den elf files ziehen.
Hat jemand Erfahrungen damit oder kennt Projekte die ähnliche Ansätze 
verfolgen?
Kann mir jemand Tipps zur Umsetzung geben oder sieht Probleme?

von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
Die RAM-Belegung zeigt nur globale und statische Variablen an. Um lokale 
Variablen (Stackverbrauch) zu zählen, muß man den Calling-Tree 
analysieren. Geht aber auch nur, solange keine rekursiven Aufrufe 
erfolgen. Auch können manche Analysetools keine Aufrufe über 
Funktionspointer verfolgen.
Auch der RAM-Verbrauch von Malloc läßt sich kaum überprüfen.

von 900ss D. (900ss)


Bewertung
1 lesenswert
nicht lesenswert
Peter D. schrieb:
> Die RAM-Belegung zeigt nur globale und statische Variablen an.

Stimmt. Wenn das reicht, dann geht das gut mit dem size-Tool aus den 
Binutils. Die Ausgabe kann so aussehen:
1
$ size --format=Berkeley ranlib size
2
            text    data    bss     dec     hex     filename
3
            294880  81920   11592   388392  5ed28   ranlib
4
            294880  81920   11888   388688  5ee50   size

Ansonsten gibt es noch readelf oder objdump, mit denen man das auch 
erledigen kann.
Aber eben beim RAM nur die statischen Größen.

: Bearbeitet durch User
von Lukas Hönnighausen (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Tipps. Ich habe wie vorgeschlagen ein Python Skript 
auf Basis der Binutils (size) geschrieben um die jeweilige Ram und Rom 
auslastung automatisiert auszulesen.

Nun würde ich noch gerne zusätzlich den 'Run from Ram' Anteil der 
jeweiligen Module bestimmen. Hat jemand da eine Idee?

von 900ss D. (900ss)


Bewertung
0 lesenswert
nicht lesenswert
Lukas Hönnighausen schrieb:
> 'Run from Ram' Anteil

Kenn ich nicht. Was meinst du genau? Den Verbrauch auf dem Stack? Der 
lässt sich nur schwierig feststellen und eine genaue Aussage über das 
Maximum geht kaum.

von foobar (Gast)


Bewertung
0 lesenswert
nicht lesenswert
objdump -h gibt detailliertere Informationen ...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.