avr gcc problem: Variablen im Flash immer 2 Byte?

Gast #546506
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
Gast #547383
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
Gast #547483
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.
Gast #547491
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.