Gast
#182220
Abend zusammen,
Ich habe folgendes Problem.
Ich programmiere einen Menübaum für meinen Mega16. Dabei deklariere ich
eine Struktur des Typs Knoten mit Zeigern auf alle Nachbarknoten.
Die Initialisierung aller Datenfelder der Struktur muss nach der
Deklaration aller Knoten erfolgen, da sonst bei der Initialisierung
während der Deklaration die Adressen von Nachbarknoten noch nicht
bekannt sind.
Soweit funktioniert das Programm ohne Probleme (siehe Beispiel).
Nur, wenn ich jetzt das Programm für den Mega16 optimiere und dabei
alle Menüknoten als FLASH-Konstanten deklarieren möchte, tritt das
Problem auf, alle Zeiger zu initialisieren.
Da es sich um Konstanten handelt, müssen sie sofort (bei der
Deklaration) initialisiert werden. Aber wie kann ich sie initialisieren
wenn die Adressen noch nicht bekannt sind?
Ich hab versucht, Deklaration und Initialisierung zu trennen:
struct Knoten
{
uint8_t v1;
uint16_t v2;
const char *s;
struct Knoten *vater;
};
const struct Knoten myknoten1 PROGMEM;
const struct Knoten myknoten2 PROGMEM;
const struct TableEntry myknoten1 PROGMEM = { 1,2,
STRING1,&myknoten2};
const struct TableEntry myknoten2 PROGMEM = { 3,4, STRING2,
&myknoten1};
Der Compiler mekerte aber:
main.c:33: warning: only initialized variables can be placed into
program memory area
Was meint Ihr, gibt es dafür eine intelligente Lösung?