mikrocontroller.net

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


Autor: C. H. (_ch_)
Datum:

Bewertung
0 lesenswert
nicht 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:
Size after:
main.elf  :
section     size      addr
.text       1602         0
.data        936   8388704
.bss          24   8389640
.stab       7692         0
.stabstr    4135         0
Total      14389

AVR Memory Usage:
-----------------
Device: atmega8

Program:    2538 bytes (31,0% Full)
(.text + .data + .bootloader)

Data:        960 bytes (93,8% Full)
(.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:
Size after:
main.elf  :
section     size      addr
.text       2242         0
.data        300   8388704
.bss          24   8389004
.stab       7740         0
.stabstr    4151         0
Total      14457

AVR Memory Usage:
-----------------
Device: atmega8

Program:    2542 bytes (31,0% Full)
(.text + .data + .bootloader)

Data:        324 bytes (31,6% Full)
(.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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: C. H. (_ch_)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.