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
Kann ich nicht reproduzieren. Lass man das "static" weg - was passiert dann?
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
>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
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.
> 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.
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.