Forum: Mikrocontroller und Digitale Elektronik Programm/RAM Belegung AVR


von Christian S. (vivus)


Lesenswert?

Hallo,

ich würde gerne den Speicherbedarf von Programm und RAM meines AVRs 
wissen, bevor ich diesen flashe um ggf. den Flashvorgang vor start 
abbrechen zu können. (z.B. wenn das Programm zu groß ist).

Ich habe gesehen, dass mit avr-size alles auslesbar ist. Nur leider kann 
man sich nicht nur die gewünschten Parameter zurückgeben lassen. Dh. ich 
müsste das erstmal prasen. Bevor ich das mache, dachte ich mir, ich 
frage hier mal nach, ob es doch eine Möglichkeit gibt, nur die 
gewünschte Zahl zu erhalten.

Mich interessieren hier nur die Werte .text size und .bss size
1
avr-size -A main.elf
2
main.elf  :
3
section                     size      addr
4
.data                          4   8388864
5
.text                      12362         0
6
.bss                         626   8388868
7
.comment                      17         0
8
.note.gnu.avr.deviceinfo      64         0
9
.debug_info                 2624         0
10
.debug_abbrev               2482         0
11
.debug_line                   29         0
12
.debug_str                   976         0
13
Total                      19184

von Thomas G. (blasebalg)


Lesenswert?

Na so wild ist das bissel rausfriemeln ja ned:
avr-size -A main.elf | awk '/.text/ {print $2}'
Liefert in deinem Fall 12362
unter Linux-Artigen, unter WIN wird's doch sicher auch was 
entsprechendes geben.

von Martin B. (ratazong)


Lesenswert?

Bei mir kommt mit:

avr-size --mcu=attiny13a   --format=avr main.elf

folgende Ausgabe, die für mich alles Wichtige anzeigt:


AVR Memory Usage
----------------
Device: attiny13a

Program:     850 bytes (83.0% Full)
(.text + .data + .bootloader)

Data:         14 bytes (21.9% Full)
(.data + .bss + .noinit)

von Christian S. (vivus)


Lesenswert?

Thomas G. schrieb:
> Na so wild ist das bissel rausfriemeln ja ned:
> avr-size -A main.elf | awk '/.text/ {print $2}'
> Liefert in deinem Fall 12362
> unter Linux-Artigen, unter WIN wird's doch sicher auch was
> entsprechendes geben.

Genau den anstoß hab ich gebraucht. Hatte vor das in C/Cpp zu parsen :P. 
SO ist nat. sehr einach und gut. Danke dir!

Martin B. schrieb:
> Bei mir kommt mit:
>
> avr-size --mcu=attiny13a   --format=avr main.elf

Sei mir nicht böse, aber das war nicht die Frage :)

von Thomas G. (blasebalg)


Lesenswert?

Christian S. schrieb:
> Hatte vor das in C/Cpp zu parsen :P

Das ist ja schon nicht mehr mit Kanonen auf Spatzen schießen, sondern 
mit Atomraketen ;-)

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Christian S. schrieb:
> ich würde gerne den Speicherbedarf von Programm und RAM meines AVRs
> wissen, bevor ich diesen flashe um ggf. den Flashvorgang vor start
> abbrechen zu können. (z.B. wenn das Programm zu groß ist).

Wenn es nur darum geht und die RAM-Größe bekannt ist:

Im default ld-Skript werden die defaults für __DATA_REGION_LENGTH__ 
und __TEXT_REGION_LENGTH__ großzügig gesetzt (mindestens so groß dass 
alle Devices der Emulation abgedeckt sind).  Diese Symbole kann man 
überschreiben:
1
$ cat foo.c
2
int volatile v;
3
int main() { return v; }
4
5
$ avr-gcc -mmcu=atmega8 foo.c # ok
6
7
$ avr-gcc -mmcu=atmega8 foo.c -Wl,--defsym,__DATA_REGION_LENGTH__=2 # ok
8
9
$ avr-gcc -mmcu=atmega8 foo.c -Wl,--defsym,__DATA_REGION_LENGTH__=1
10
./avr/bin/ld.exe: address 0x800062 of a.out section `.bss' is not within region `data'
11
collect2.exe: error: ld returned 1 exit status
12
13
$ avr-gcc -mmcu=atmega8 foo.c memory-atmega8.x
14
./avr/bin/ld.exe: a.out section `.text' will not fit in region `text'
15
./avr/bin/ld.exe: region `text' overflowed by 98 bytes
16
collect2.exe: error: ld returned 1 exit status
17
18
$ cat memory-atmega8.x
19
OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")
20
21
__DATA_REGION_LENGTH__ = 2;
22
__TEXT_REGION_LENGTH__ = 0K;
23
24
$ avr-size a.out
25
   text     data      bss      dec      hex  filename
26
     98        0        2      100       64  a.out

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.