www.mikrocontroller.net

Forum: Compiler & IDEs avr-gcc Speicherbelegung anzeigen lassen


Autor: _CH_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ist es möglich beim avr-gcc die Speicherbelegung nach dem Kompilieren 
anzeigen zu lassen?

Bisher steht nur z.B.:
Size after:
main.elf  :
section    size      addr
.text      1132         0
.data        16   8388704
.bss         34   8388720
.noinit       0   8388754
.eeprom       0   8454144
.stab      4776         0
.stabstr   2918         0
Total      8876

-------- end --------

Es wäre doch interessant zu wissen, zu wieviel % der Controller nun 
voll/leer ist.
Ich glaube das schon mal irgendwo gesehen zu haben, finde es aber leider 
nicht mehr :-/
Kann man das mit "nur" einer Einstellung im Makefile machen, oder 
braucht man da ein separates Programm?

Gruß,
Christian

Linux avr-gcc (GCC) 4.1.0
"Standard-Makefile" by Eric B. Weddington, Jörg Wunsch

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gugele mal nach dem Script avr-mem.sh von Eric Weddington.  Leider hat
er es für die aktuellen WinAVR-Versionen vorgezogen, diesen Script
nicht mehr zu pflegen und stattdessen einen Hack ins avr-size-Kommando
reinzupatchen.

Autor: _ CH_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

vielen Dank. Habe avr-mem.sh gefunden. Da hast du ja auch mitgetippt :)
Wo muss ich das Script jetzt hinkopieren damit das auch tut? /usr/avr/?

Gruß,
Christian

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
 CH wrote:

> Da hast du ja auch mitgetippt :)

Naja, eher Input für Eric geliefert, wenn er nicht weiter kam.  Keine
Ahnung, ist zu lange her.

> Wo muss ich das Script jetzt hinkopieren damit das auch tut? /usr/avr/?

Irgendwohin, sodass es in ${PATH} auffindbar ist.  Den Aufruf musst
du dir schon selbst in dein Makefile noch reinschmieden.

Autor: _ CH_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Irgendwohin, sodass es in ${PATH} auffindbar ist.
Könntest du das bitte etwas genauer spezifizieren? Ist damit der 
Projektpfad gemeint?

Momentan habe ich das Script im Projektordner abgelegt. Wenn ich es 
manuell aufrufe (./avr-mem.sh main.elf atmega32) funktioniert es 
einwandfrei.
Der Aufruf mit $(AVRMEM); (-> AVRMEM = avr-mem.sh $(TARGET).elf $(MCU) ) 
aus dem Makefile heraus liefert jedoch "sh: avr-mem.sh: not found". Ich 
schließe daraus, dass ich es falsch abgelegt habe - nur wohin?

Vergeblich versucht habe ich auch schon nach:
/usr/avr/bin/
/usr/lib/gcc/avr/4.1.0/

Gruß,
Christian

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
 CH wrote:

> Könntest du das bitte etwas genauer spezifizieren? Ist damit der
> Projektpfad gemeint?

PATH ist die Umgebungsvariable, in der Unix nach ausführbaren
Dateien sucht.

Wenn du in der Shell ein
echo $PATH

eingibst, bekommst du angezeigt, was alles dazu gehört.

Autor: _ CH_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>echo $PATH
ahh, vielen Dank - wieder was gelernt!

So, avr-mem lässt sich nun vom Makefile aus aufrufen, jedoch:
avr-mem.sh main.elf atmega32
sh: Size: not found

Das Makefile spricht : "SIZE = avr-size".

Ne Idee, was da noch sein könnte?

Gruß,
Christian

Autor: C. H. (_ch_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, nun läuft's. Das Script lief mit zu wenig Rechten und blieb 
anscheinend irgendwo hängen...

Danke an Jörg für deine Unterstützung!


Für alle mit gleichem Problem hier eine kleine Zusammenfassung :)

1) avr-mem.sh-Script z.B. von http://www.kieltech.de/uweswiki/AVR_2dGCC 
downloaden
Linux-version: avr-mem.sh.gz (http://www.kieltech.de/~ufechner/avr-mem.sh.gz)

2) Script irgendwohin entpacken/kopieren, sodass es in ${PATH} 
auffindbar ist
echo $PATH

3) Script mit Rechten "ausstatten" (WICHTIG!)
sudo chmod +x avr-mem.sh

4) Aufruf aus dem Makefile:
# Display size of file.
AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)

sizeafter:

  @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \

  $(AVRMEM) 2>/dev/null; echo; fi


---fertig---


Nun sollte die Ausgabe zum Beispiel so aussehen:
Size after:
main.elf  :
section    size      addr
.text      1086         0
.data        16   8388704
.bss         39   8388720
.noinit       0   8388759
.eeprom       0   8454144
.stab      4632         0
.stabstr   2770         0
Total      8543


AVR Memory Usage:
-----------------
Device: atmega32

Program:    1102 bytes (3,4% Full)
(.text + .data + .bootloader)

Data:         55 bytes (2,7% Full)
(.data + .bss + .noinit)


-------- end --------


Ähnlicher Beitrag für Windows-Mühlen mit WinAVR:
Beitrag "Re: avr-size"


Vielleicht hilft's ja dem Einen oder Anderen.


Gruß,
Christian

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.