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)
Lass mal in extern U8 aucBitmapData [] FLASHMEM; extern U16 auiBitmapAdrIndexAndSize [] FLASHMEM; das FLASHMEM weg.
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!
const U8 aucBitmapData [] FLASHMEM = { const U16 auiBitmapAdrIndexAndSize [] FLASHMEM = {
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.
> 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
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 ?!
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 ...
>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 Fehler ist ein Fehler, und den solltest du für nicht im Flash liegende Tabellen bekommen. Beitrag "sizeof geht nicht" Oliver
grrr.. Der Fehler ist ein Fehler, und den solltest du AUCH für nicht im Flash liegende Tabellen bekommen.
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
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.