Forum: Mikrocontroller und Digitale Elektronik AVR-Studio rechnet falsch!?


von Dietmar (Gast)


Lesenswert?

Hallo zusammen,

folgendes ist mir aufgefallen:

Wenn ich meine Sourcen, für einen ATmega16 mit dem AVR Studio 4.18, 
compiliere, bekomme ich als Data eine Belegung von 319 Byte, ~31% 
angezeigt.

In einem File stehen aber folgende Zeilen Code:

uint16_t ringbuffer_links[256];
uint16_t ringbuffer_rechts[256];

Meiner Rechnung nach sind das alleine aber schon 1024 Byte Data. Ergibt 
also zusammen mit oben 1343 Byte Daten. Das Programm hängt sich, 
erwartungsgemäß, auch auf.

Meine Frage:

Kann man das AVR-Studio wieder so einstellen das es richtig rechnet?
Hat hier einer eine Idee dazu? Oder liege ich mit meiner Rechnung 
falsch?

Ich fand es eigentlich ganz praktisch angezeigt zu bekommen wo die 
Speichernutzung hinläuft.

Gruß Dietmar

von jonas biensack (Gast)


Lesenswert?

Optimierung ausmachen...

von jonas biensack (Gast)


Lesenswert?

Und außerdem werden die im Ram angelegt...

von Wichtel (Gast)


Lesenswert?

Der Compiler kann nicht errechnen wieviel Speicher zur Laufzeit genutzt 
wird...

von jonas biensack (Gast)


Lesenswert?

Man könnte es natürlich debuggen ;)

von Matze T. (gruetzwurschd)


Lesenswert?

Versuche mal folgendes:
Öffne dein Project->geh oben auf das "project" pulldown 
menü->Configuration options->Stelle unter "Optimization" O0 ein.

von Johannes E. (cpt_nemo)


Lesenswert?

Dietmar schrieb:
> In einem File stehen aber folgende Zeilen Code:
>
> uint16_t ringbuffer_links[256];
> uint16_t ringbuffer_rechts[256];
>
> Meiner Rechnung nach sind das alleine aber schon 1024 Byte Data.

Im "Data"-Bereich werden alle globalen Variablen und Static-Variablen 
abgelegt.

Lokale Variablen werden erst zur Laufzeit und zwar auf dem Stack 
angelegt, deswegen werden die hier nicht mit berechnet.

von Dietmar (Gast)


Lesenswert?

Wichtel schrieb:
> Der Compiler kann nicht errechnen wieviel Speicher zur Laufzeit genutzt
> wird...
>
>

Das wird's sein. Werde die beiden Variablen mal global anlegen, dann 
wird sich da wohl was tuen.

Guter Tipp. Gefahr erkannt, Gefahr gebannt.

Debuggen lohnt sich nicht, da ich ja ehh weiß da der genutze Ram zuviel 
ist.
Der Stack hadert dam mit den Variablen ;-).

Den Ringpuffer habe ich mittlerweile verkleinert und das Ding rennt 
jetzt.
War aber auch nicht mein Problem.

Gruß Dietmar

von jonas biensack (Gast)


Lesenswert?

>Versuche mal folgendes:
>Öffne dein Project->geh oben auf das "project" pulldown
>menü->Configuration options->Stelle unter "Optimization" O0 ein.

Und dann ? Werden die Array's trotzdem im Ram angelegt, dass macht also 
keinen Sinn.

Gruß Jonas

von jonas biensack (Gast)


Lesenswert?

In den Data-Bereich kommst du nur mi PROGMEM, nichts mit globalen 
Variablen...

von Matze T. (gruetzwurschd)


Lesenswert?

jonas biensack schrieb:
>>Versuche mal folgendes:
>>Öffne dein Project->geh oben auf das "project" pulldown
>>menü->Configuration options->Stelle unter "Optimization" O0 ein.
>
> Und dann ? Werden die Array's trotzdem im Ram angelegt, dass macht also
> keinen Sinn.
>
> Gruß Jonas

Ist dir in deiner unendlichen Weisheit mal aufgefallen dass er von 
"Data" gesprochen hat ? Odre hat irgendjemand was von "Program-Memory" 
gesagt?

Und jetzt stellt sich die Frage ob dietmar die Daten innerhalb einer 
Funktion angelegt hat oder als Globals.

von Matze T. (gruetzwurschd)


Lesenswert?

jonas biensack schrieb:
> In den Data-Bereich kommst du nur mi PROGMEM, nichts mit globalen
> Variablen...

Und das ist ausgemachter Blödsinn. Aber naja hauptsache auch mal was 
gesagt

von Dietmar (Gast)


Lesenswert?

Tarkan D. schrieb:
> Und jetzt stellt sich die Frage ob dietmar die Daten innerhalb einer
> Funktion angelegt hat oder als Globals.

Die Daten lagen innerhalb der main, waren also nicht global angelegt.
Und jetzt nicht mehr streiten, meine Frage ist doch schon beantwortet 
;-)

Gruß Dietmar

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.