Forum: Compiler & IDEs Verständnisfrage avr-mem.sh


von C. H. (_ch_)


Lesenswert?

Hallo,

ich spiele gerade etwas mit meinem M8 herum, dabei ist mir folgendes 
aufgefallen:

Wenn ich ein etwas größeres "const array" im RAM ablege, dann bekomme 
ich nach dem Kompillieren von avr-mem.sh folgendes angezeigt:
1
Size after:
2
main.elf  :
3
section     size      addr
4
.text       1602         0
5
.data        936   8388704
6
.bss          24   8389640
7
.stab       7692         0
8
.stabstr    4135         0
9
Total      14389
10
11
AVR Memory Usage:
12
-----------------
13
Device: atmega8
14
15
Program:    2538 bytes (31,0% Full)
16
(.text + .data + .bootloader)
17
18
Data:        960 bytes (93,8% Full)
19
(.data + .bss + .noinit)

lege ich das "const array" jedoch mit den Funktionen aus pgmspace.h und 
PROGMEM in den Flash, so erhalte ich folgendes Ergebnis:
1
Size after:
2
main.elf  :
3
section     size      addr
4
.text       2242         0
5
.data        300   8388704
6
.bss          24   8389004
7
.stab       7740         0
8
.stabstr    4151         0
9
Total      14457
10
11
AVR Memory Usage:
12
-----------------
13
Device: atmega8
14
15
Program:    2542 bytes (31,0% Full)
16
(.text + .data + .bootloader)
17
18
Data:        324 bytes (31,6% Full)
19
(.data + .bss + .noinit

Wie kommt es dazu, dass bei beiden Versionen der Programmspeicher 
annähernd gleich belegt ist? Im zweiten Fall belegt doch das const array 
zusätzlich Platz im Flash.
An der ".text" section sieht man es ja sehr schön, aber warum wird es in 
avr-mem.sh nicht beachtet?

Gruß
Christian

von Stefan B. (stefan) Benutzerseite


Lesenswert?

C. H. wrote:

> Wie kommt es dazu, dass bei beiden Versionen der Programmspeicher
> annähernd gleich belegt ist? Im zweiten Fall belegt doch das const array
> zusätzlich Platz im Flash.

Im ersten Fall auch. Nur wird es dann zur Laufzeit aus dem Flash 
zusätzlich in das RAM kopiert (vom Startupcode).

> An der ".text" section sieht man es ja sehr schön, aber warum wird es in
> avr-mem.sh nicht beachtet?

Die Ausgabe ist schon OK. Vielleicht hilft es zum Verständnis, wenn du 
dies dazu denkst:

Program-*Memory bzw. ROM*:    2542 bytes (31,0% Full)
(.text + .data + .bootloader)

Data-*Memory bzw. RAM*:        324 bytes (31,6% Full)
(.data + .bss + .noinit

von C. H. (_ch_)


Lesenswert?

Hallo Stefan,

aaach, ja klar - Danke dir!
Da hätte man selbst auch drauf kommen können.
Im ersten fall ist ja der Speicherplatz zweimal belegt; zum einen im 
Flash dauerhaft, zum anderen im RAM zur Laufzeit.
Im zweiten Fall ist nur der Flash belegt und ich greife zur Laufzeit 
direkt darauf zu.

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.