www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEMEM variable belegt SRAM? (avr-size-x)


Autor: Revision (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi.

Ich habe meine Konfigurationsdaten als struct im EEMEM abgelegt, im 
Prinzip so:
typedef struct {
  ...
} Config;

Config cfg EEMEM;

Das Struct ist etwa 700 Byte gross. Jetzt ist mir beim verwenden von 
avr-sizex.exe aufgefallen das diese 700 Byte nicht nur als belegter 
EEPROM Speicher angezeigt werden, sondern anscheinend auch 700 Byte SRAM 
extra "abgebucht" werden.
Das macht nicht wirklich Sinn oder?
Man liest ja die Daten zur Verarbeitung dann ja über die eeprom 
Funktionen erst explizit in den SRAM.

R

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Revision wrote:

> Man liest ja die Daten zur Verarbeitung dann ja über die eeprom
> Funktionen erst explizit in den SRAM.

Schon richtig.
Aber wo liest du sie denn hin? Wenns in eine globale Variable ist, dann 
braucht die auch Speicher im SRAM, den dir avrsize anzeigt.

Autor: Revision (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Karl-Heinz,

die Config wird direkt in eine Globale Variable AppConfig geladen.
Nachfolgend ein Auszug aus dem Output von avr-sizex.exe:
    Flash     SRAM     EEPROM 
    -----     ----     ------ 
      32%      68%        36%
    18462     2817        742    bytes used
    38882     1279       1306    bytes free
    57344     4096       2048    bytes capacity

Top Functions                        Top Variables (global/static) 
------------------------------       ------------------------------
main                 702 bytes       eeConfig             734 bytes
ModeIdle_Process     574 bytes       AppConfig            734 bytes

Ich habe den SRAM Verbrauch mal mit dem restlichen Variablen 
überschlagen
und es ist "eindeutig" das dort 2x734 Bytes addiert werden.

Ich hab jetzt nochmal avr-size.exe getestet.
Das gibt mir folgendes aus:
   
text     data      bss      dec      hex  filename  
17848     1356     2203    21407     539f  main.elf

Hier scheinen die 734 Bytes der eeConfig nicht aufzutauchen (bss?). Ich 
kenne mich allerdings jetzt nicht so gut mit dem sections aus. Lese ich 
ggf. nochmal nach.

R

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Revision wrote:
> Hi Karl-Heinz,
>
> die Config wird direkt in eine Globale Variable AppConfig geladen.

Na ja. Was willst du dann?
Klar braucht die auch Speicher.

Nur weil sie ihre Werte beim Hochfahren des Programms aus dem EEPROM 
bekommt, ändert sich ja nichts daran, dass das erst mal eine stink 
normale Variable im SRAM ist.

Autor: Revision (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HI.

Ich habe doch im vorigen Post erwähnt das der Speicher für das Config 
Struct zweimal zum verwendeten SRAM hinzugefügt wird. Von AppConfig UND 
von eeConfig.
Das AppConfig Im SRAM Auftaucht ist klar.
Aber das wird wohl wirklich ein Fehler von avr-sizex.exe sein.

R

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.