Merkwürdigkeit mit PROGMEM Array

OP Persönliche Seite #1495758
Lesenswert?
• ▲
▼
Ich habe ein kleines Problem das ich nicht so ganz verstehe.
Ich habe eine C-Datei in der Daten abgelegt sind (ein UCHAR und ein 
UINT-Array). Beim Compilieren der Datei erhalte ich folgende Warnung :
"only initialized variables can be placed into program memory area".
Aber ich habe das Array doch initialisiert, oder sehe ich da was falsch 
?!
(Nicht über das FLASHMEM im Code wundern. Es gibt ein Makro das aus 
FLASHMEM PROGMEM macht, und selbst wenn ich es händisch mache kommt 
diese Fehlermeldung).
Hintergrund des ganzen ist das ich die Funktion uiGLCDGetBitmapDataSize 
nicht nutzen kann da sie angeblich nicht definiert ist (im Headerfile 
ist diese allerdings definiert und wird auch korrekt von allen anderen 
Modulen includiert, Kompiliere ich das ganze ohne das glcd_data modul 
meckert der Compiler das er aucBitmapData nicht kennt). Da das Array 
angeblich nicht korrekt initialisiert ist wird wohl auch anscheinend die 
sizeof-Operation wegoptimiert und somit die ganze Funktion (was mir 
allerdings merkwürdig vorkommt).
Was kann das für ein Fehler sein ?! (zumal ich in einem anderen Stand 
des Projektes genau die selbe Datei nutze und das Compilieren dort keine 
Probleme macht)
Angehängte Dateien:
#1495784
Lesenswert?
• ▲
▼
Rene Böllhoff schrieb:

> UINT-Array). Beim Compilieren der Datei erhalte ich folgende Warnung :
> "only initialized variables can be placed into program memory area".

Bei Fehlermeldungen hilft es, wenn man rauskriegt, auf welche Zeile sich 
die bezieht. Das steht sogar manchmal dabei!
OP Persönliche Seite #1495809
Lesenswert?
• ▲
▼
erstmal danke für die antworten.

also das , } ist zulässig. das mach ich seit eh und je so und da hat 
noch kein compiler drüber gemeckert.
das extern xxx FLASHMEM sollte aber auch kein thema sein (zumindest lies 
sich das in der vorherigen version einwandfrei kompilieren).
das die zeilennummer dabeisteht hab ich schon gemerkt :-) deshalb bin 
ich ja so verwirrt, da in der zeile ja wirklich eine initialisierung des 
arrays steht, der compiler aber das gegenteil behauptet.
Gast #1495854
Lesenswert?
• ▲
▼
> Process Exit Code: 0
> Time Taken: 00:19

Ich kann anstellen, was ich will, deinen Fehler bekomme ich nicht 
reproduziert. Das Problem liegt nicht in den Zeilen Code, die du hier 
gezeigt hast.

Oliver
OP Persönliche Seite #1497007
Lesenswert?
• ▲
▼
Ich hab mir erstmal damit geholfen den compilierbaren Software-Stand 
dahingehend upzudaten das er dem derzeitigen SW-Stand entspricht. Es 
lies sich auch ohne Fehler Compilieren. Allerdings habe ich beim 
weiteren programmieren den Fehler erneut gehabt (diesmal mit einer 
anderen Tabelle).
Diesmal habe ich zwar nicht den Fehler "only initialized variables can 
be ..." erhalten, sondern dafür "invalid application of 'sizeof' to 
incomplete type of blabla []".
der eigentliche witz ist aber :
kopiere ich die betreffende tabelle in das selbe modul benenne diese um 
(und auch die variable in sizeof) funktioniert das ganze. das kann es 
aber nicht sein (da ich die tabelle dann ja zweimal bräuchte.
also so langsam glaub ich ist da im winavr (ich hab den 20081124rc3) ein 
bug drin ist.
komischerweise bekomme ich den fehler nur wenn ich sizeof auf eine 
flash-tabelle anwende. aber im prinzip sollte es ja egal sein.
ein versuch mit "const" davor ist leider auch gescheitert.
ich denke ich muß wirklich den winavr (und wenn ich schonmal dabei bin, 
mein avrstudio) updaten. kann das evtl. der grund sein das ich diese 
merkwürdigen effekte bekomme ?!
OP Persönliche Seite #1497061
Lesenswert?
• ▲
▼
also irgendwie versteh ichs nicht ... selbst der neue winavr (20090313) 
hat dieses komische verhalten.
ich hab mir im moment damit geholfen das ich den benötigten code direkt 
in dem modul platziert habe indem auch die tabellen liegen. liegen die 
tabellen außerhalb des moduls habe ich keine chance mit sizeof darauf 
zuzugreifen.
ist das normales verhalten. vllt dadurch bedingt das ich im headerfile 
"extern xxxx [] FLASHMEM" stehen hab ?!
irgendwie steh ich aufm schlauch ...
Gast #1497109
Lesenswert?
• ▲
▼
Wobei die saubere Lösung für das Problem ja schon ganz oben in deinem 
Code enthalten ist. Eine eigene Funktion im der Datei, die auch das Feld 
enthält, und die die Größe zurückgibt. OOP lässt grüßen.

Oliver

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.