Forum: Compiler & IDEs avr gcc problem: Variablen im Flash immer 2 Byte?


von ajax (Gast)


Lesenswert?

Hallo,

folgendes Problem haben ich:

Wenn ich in einem C-Programm für den GCC folgende Variable definiere:

static uint8_t test[] PROGMEM ={ 1,2,3 }

wächst mit jedem zusätzlichen Byte der angezeigte Speicherverbrauch um 2 
Byte. Das kann doch nicht sein, oder?

Um gleich der Argumentation mit "Flash hat immer Wortbreibe" 
vorzubeugen:

static uint16_t test[] PROGMEM ={ 1,2,3 }

hier wächst mit jedem zusätzlichen Wort der Speicherverbrauch um 4 Byte. 
Es wird also immer das doppelte von dem verbraucht, was eigentlich nötig 
wäre.

Hatte jemand das Problem schon mal?

Gruss,
ajax

von A.K. (Gast)


Lesenswert?

Kann ich nicht reproduzieren. Lass man das "static" weg - was passiert 
dann?

von ajax (Gast)


Lesenswert?

Hallo A.K.

Danke für den Tipp. Ich habe mittlerweile herausgefunden, dass es an 
einer veralteten Compiler Version liegt ( WinAVR20060421 ) Mit der 
aktuellen Version geht's.

Gruss,
ajax

von ajax (Gast)


Lesenswert?

>Ich habe mittlerweile herausgefunden, dass es an
>einer veralteten Compiler Version liegt ( WinAVR20060421 ) Mit der
>aktuellen Version geht's.

Leider muss ich meine Aussage noch mal korrigieren, es lag doch nicht an 
der Version. Ich habe es gerade noch einmal mit der neuesten Version 
probiert und da wird auch ein ganzes Flash-Wort für eine Byte-Variable 
verbraucht.

Wenn ich "static" weglasse, gibt es einen Compilerfehler.

Ich verwende als Compiler-Option -O0
Bei -O2 wird zwar nur ein Byte verbraucht, aber leider funktioniert dann 
das Programm nicht mehr.

Gruss,
ajax

von Stefan M. (Gast)


Lesenswert?

Das ist ein deutliches Zeichen, daß Dich der Compiler nicht versteht. 
Versuche es mal mit -Os und analysiere Dein Programm auf 
Mißverständnisse zwischen Dir und dem Compiler.

ciao, Stefan.

von A.K. (Gast)


Lesenswert?

> Wenn ich "static" weglasse, gibt es einen Compilerfehler.

Genau das dache ich mir, daher kam der Tip. Wahrscheinlich hast du das 
in einem Include-File stehen, und dieses wird zweimal verwendet. Dann 
taucht das Array doppelt auf und braucht doppelt Platz. Ohne "static" 
mosert statt dessen der Linker.

von Karl H. (kbuchegg)


Lesenswert?

> Bei -O2 wird zwar nur ein Byte verbraucht, aber leider
> funktioniert dann das Programm nicht mehr.

Das deutet darauf hin, dass in deinem Programm noch andere
Fehler darauf warten entdeckt zu werden.


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.