Programm/RAM Belegung AVR

OP #5310848
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
OP #5310882
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 :)
Persönliche Seite #5310916
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren