Forum: Compiler & IDEs avr-gcc Speicherbelegung anzeigen lassen


von _CH_ (Gast)


Lesenswert?

Hallo,

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

Bisher steht nur z.B.:
1
Size after:
2
main.elf  :
3
section    size      addr
4
.text      1132         0
5
.data        16   8388704
6
.bss         34   8388720
7
.noinit       0   8388754
8
.eeprom       0   8454144
9
.stab      4776         0
10
.stabstr   2918         0
11
Total      8876
12
13
-------- 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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von _ CH_ (Gast)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von _ CH_ (Gast)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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
1
echo $PATH

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

von _ CH_ (Gast)


Lesenswert?

>echo $PATH
ahh, vielen Dank - wieder was gelernt!

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

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

Ne Idee, was da noch sein könnte?

Gruß,
Christian

von C. H. (_ch_)


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
1
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
1
echo $PATH

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

4) Aufruf aus dem Makefile:
1
# Display size of file.
2
AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
3
4
sizeafter:
5
6
  @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
7
8
  $(AVRMEM) 2>/dev/null; echo; fi


---fertig---


Nun sollte die Ausgabe zum Beispiel so aussehen:
1
Size after:
2
main.elf  :
3
section    size      addr
4
.text      1086         0
5
.data        16   8388704
6
.bss         39   8388720
7
.noinit       0   8388759
8
.eeprom       0   8454144
9
.stab      4632         0
10
.stabstr   2770         0
11
Total      8543
12
13
14
AVR Memory Usage:
15
-----------------
16
Device: atmega32
17
18
Program:    1102 bytes (3,4% Full)
19
(.text + .data + .bootloader)
20
21
Data:         55 bytes (2,7% Full)
22
(.data + .bss + .noinit)
23
24
25
-------- end --------


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


Vielleicht hilft's ja dem Einen oder Anderen.


Gruß,
Christian

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.