Forum: Mikrocontroller und Digitale Elektronik RAM Nutzung, unterschiedliche Größenangaben


von Adam P. (adamap)


Lesenswert?

Hallo zusammen,

ich versuche grad nachzuvollziehen auf welche Angabe ich mich verlassen 
kann.

SAM4E16E
RAM-Bereich: 0x20000000 - 0x20020000 (131072 bytes)
Stack ist auf 0x2000 (8192 bytes) definiert.

1)
AtmelStudio liefert mir folgende Ausgabe:
(arm-none-eabi-size.exe "Main_Module.elf")
Data Memory Usage:   85712 bytes   65,4 % Full

2)
Im map-File steht:
1
// 0x20000000 - 0x20013c90
2
// mein genutzter RAM
3
.stack          0x20013c90     0x2000 load address 0x004597d0
4
                0x20013c90                . = ALIGN (0x8)
5
                0x20013c90                _sstack = .
6
                0x20015c90                . = (. + __stack_size__)
7
 *fill*         0x20013c90     0x2000 
8
                0x20015c90                . = ALIGN (0x8)
9
                0x20015c90                _estack = .
10
                0x20015c90                . = ALIGN (0x4)
11
                0x20015c90                _end = .
Somit würde 0x20015c90 bedeuten, der RAM wird zu 89232 bytes genutzt.

3)
Ausgabe der Größen aus den object-files
arm-none-eabi-size.exe *.o

.data + .bss aller Dateien zusammengerechnet: 75282 bytes

Ok, da muss man noch die ganzen fill bytes dazu rechnen,
aber das sind keine mehrere 1000.

Was stimmt davon?

Gruß Adam

von Programmierer (Gast)


Lesenswert?

Adam P. schrieb:
> .data + .bss aller Dateien zusammengerechnet: 75282 bytes

Da fehlt der Stack und Heap und sonstige Dinge die im Linkerscript 
passieren. Am hilfreichsten ist eigentlich "readelf -S Datei.elf" und 
das mit dem Linkerscript abgleichen.

von Adam P. (adamap)


Angehängte Dateien:

Lesenswert?

Programmierer schrieb:
> Da fehlt der Stack und Heap

Selbst wenn ich den Stack dazu zähle, passt es nicht.
Heap nutze ich nicht.

Programmierer schrieb:
> Am hilfreichsten ist eigentlich "readelf -S Datei.elf"
1
[ 3] .relocate   REL             20000000 050000 000dc0 08 WAX  0   0  8
2
[ 4] .bss        NOBITS          20000dc0 050dc0 012ed0 00  WA  0   0  8
3
[ 5] .stack      NOBITS          20013c90 050dc0 002000 00  WA  0   0  1

Da komme ich auch auf 89232 bytes, wie es laut dem map-file ist.

: Bearbeitet durch User
von Adam P. (adamap)


Lesenswert?

OK, ich glaub jetzt hab ich es gefunden.
Es lag am .relocate.

Wenn ich vom map-file (89232 bytes) die Größe vom .relocate abziehe,
dann erhalte ich das was AtmelStudio mir ausgibt.

Danke @ Programmierer (Gast).
"readelf" kannte ich noch nicht.

: Bearbeitet durch User
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.