www.mikrocontroller.net

Forum: Compiler & IDEs Tool zur Ermittlung der Speicherbelegung


Autor: G. B. (garyb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

aus akt. Anlass habe ich nach einem Tool gesucht, welches mir aufzeigt
wieviel Programmspeicher die einzelnen Funktionen meines Programms auf
einem AVR MEGA 8 belegen. Ich wollte damit schauen wo ich noch
etwas optimieren kann.
Fazit - ich habe hier erst einmal nix gefunden, was mir hier hätte 
helfen können. Es gibt zwar ältere Beiträge zur Belegung im 
Gesamtspeicher, wie z.B. Beitrag "avr-gcc Speicherbelegung anzeigen lassen"
aber anscheinend Nichts für einzelne Funktionen.
Grundsätzlich sollte diese Information doch im MAP-File zu finden sein.
Zumindest habe ich da so eine Tabelle gesehen:
.....
 .text          0x0000005e      0x15c main.o
                0x0000005e                init_ports
                0x0000009c                __vector_11
                0x0000006c                command_1
                0x00000084                command_0
                0x000000ea                main
                0x000001b2                stdout_usart
 .text          0x000001ba       0x6e AVR_USART.o
                0x000001f4                avr_usart_putc
                0x00000210                avr_usart_getc_wait
                0x000001ba                avr_usart_init_9600_8_1_N_Asyn
                0x00000224                avr_usart_getc_isr
                0x00000218                avr_usart_getc
                0x000001fc                avr_usart_puts
.....
Nun zu meinen Fragen:
Gibt es da wirklich kein Tool für - oder hab ich das einfach nicht 
gefunden?
Wären das die richtigen Einträge für die Feststellung der Größe der 
Funktionen?

Gruss,
Gary

Autor: Albert ... (albert-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zur Ermittlung der größe einzelner Funktionen gibt es im Win-AVR einige 
Kommandozeilen tools. Hier genaueres nachzulesen:
http://www.rn-wissen.de/index.php/Speicherverbrauc...

Das wichtige für dich wird die Funktion
avr-nm --size-sort --print-size foo.elf
Das gibt dir die größe jeder einzelnen Funktion in dem angegebenen 
elf-File aus.

Sieht dann Beispielsweise so aus
0080006c 00000002 B ad_value
0080006e 00000004 B text
00000256 0000000c T lcd_enable
000002dc 00000010 T lcd_clear
000002cc 00000010 T lcd_home
00000092 00000012 T main
00000360 0000001a T lcd_string
000002a0 0000002c T set_cursor
000000f6 00000034 T InitADC
0000012a 00000034 T ValToString
00000262 0000003e T lcd_command
00000216 00000040 T lcd_data
000000a4 00000052 T ADCReadChannel
000002ec 00000074 T lcd_init
0000015e 000000b8 T PrintADCValue

Autor: G. B. (garyb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
cool - danke erst einmal

Autor: G. B. (garyb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Albert
Okay habs gefunden und auch gleich ausprobiert,
allerdings verstehe ich noch nicht wie ich die Zahlen zu interpretieren 
habe.
Aus deinem Beispiel heraus hätte ich vermutet:
erste Zahl = Speicheradresse
zweite Zahl = Größe in Byte

Aber das haut bei meinem Beispiel nicht hin, ich sehe im Debugger ganz
andere Adressen, wenn ich in das Disassebly umschalte - aus AVR-Studio.
Wo liegt mein Fehler?

Autor: Albert ... (albert-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sry für die späte Antwort.
Also bei mir stimmt es überein. Hast du vl. ausversehen das .hex file 
angegeben statt dem elf File?
Erste Spalte ist wie du dachtest die Adresse und die zweite die größe in 
Hex.

Kannst du mal den Output von avr-nm hier reinposten und ein beispiel wo 
es nicht übereinstimmt aus dem AVR studio?

P.S. Kopieren aus der Konsole geht über einen klick auf das 
Console-Symbol oben links, dann bearbeiten->markieren. Mit gedrückter 
Maustaste gwünschten Bereich markieren und über bearbeiten->kopieren in 
die Zwischenablage.

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.