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


von Revision (Gast)


Lesenswert?

Hi.

Ich habe meine Konfigurationsdaten als struct im EEMEM abgelegt, im 
Prinzip so:
1
typedef struct {
2
  ...
3
} Config;
4
5
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

von Karl H. (kbuchegg)


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.

von Revision (Gast)


Lesenswert?

Hi Karl-Heinz,

die Config wird direkt in eine Globale Variable AppConfig geladen.
Nachfolgend ein Auszug aus dem Output von avr-sizex.exe:
1
    Flash     SRAM     EEPROM 
2
    -----     ----     ------ 
3
      32%      68%        36%
4
    18462     2817        742    bytes used
5
    38882     1279       1306    bytes free
6
    57344     4096       2048    bytes capacity
7
8
Top Functions                        Top Variables (global/static) 
9
------------------------------       ------------------------------
10
main                 702 bytes       eeConfig             734 bytes
11
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:
1
   
2
text     data      bss      dec      hex  filename  
3
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

von Karl H. (kbuchegg)


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.

von Revision (Gast)


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

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.