mikrocontroller.net

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


Autor: ajax (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A.K. (Gast)
Datum:

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

Autor: ajax (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ajax (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan May (smay4finger)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.


Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.