Hallo,
ich schreibe gerade an einem kleinen Menu-teil für mein Projekt. Bisher
lief alles OK im Visual Studio.
Ich versuche das ganze jetzt in den AVR-GCC zu wandeln habe jetzt aber
das Problem, dass ich die Struktur nicht in den Flash schreiben kann.
Ich bekomme ständig die Fehlermeldung:
menu.cpp:12: error: expected initializer before "PROGMEM"
Kann mir bitte jemand Weiterhelfen?
Ich will die Struktur myMENU des Typs menu in den Flash schreiben.
mfg Alex
Sieht die Synthax für eine Struct-Definition nicht ander aus ? (In C tut
sie das auf jeden Fall, ich hab aber keine Ahnung von C++ )
In C bräuchtest du einen Prototyp für den Struct:
1
structmenu{
2
PSTR(string);
3
char*einpointer;
4
Typvar;// mußt du einsetzen
5
}
6
// und deine Deklaration sähe so aus:
7
conststructmenumyMENU[]PROGMEM={
8
{"Test1",&SetMenu,test1},
9
{"Test2",&bar,NULL},
10
{"Test3",&foobar,NULL},
11
{"zurück?",NULL,NULL},
12
{"",NULL,NULL}
13
};
14
//Du kannst dann "const" und PROGMEM noch in den Prototypen verlagern.
Einfach (noch-)mal das Kapitel "Struct" in deinem (C /C++) Buch und das
Kapitel "<avr>/pgmspace.h" in der AVR-GCC doku nachschlagen
Den Prototyp habe ich im Header.
Das ganze sieht jetzt so aus:
cpp-Datei:
const struct menu myMENU[] PROGMEM = {
{PSTR("Test1"), &SetMenu, test1},
{PSTR("Test2"), &bar, NULL},
{PSTR("Test3"), &foobar, NULL},
{PSTR("zurück?"), NULL, NULL},
{PSTR(""), NULL, NULL}
};
Prototyp aus header:
struct menu{
const char* text;
void (*fp)(struct menu*);
struct menu* pUMenu;
};
----------------------------------------
Ich will dass der Compiler mit alle "TEXTE" in den Flash schreibt, sowie
die ganze Struktur myMENU.
=> FLASH soll später stehen:
die Texte ,
die Strukturen
die Adressen der Texte in der Struktur,
die Adressen der Funktionen in der Struktur,
die Adressen der "Untermenus"
PSTR gibt mir die Adressen der TEXTE im Flash zurück, der wird in den
Char * geschrieben.
Trotz allem bekomme ich immernoch die selbe Fehlermeldung:
menu.cpp:13: error: expected initializer before "PROGMEM"
mfg
Dankeschön,
ich habe meinen Fehler mittlerweile auch gefunden, allem anschein nach
kann ich dem avrgcc nicht soviel zumuten wie gedacht.
Danke nochmal.
mfg
Verrätst du den Fehler ?
Falls nochmal jemand ein ähnliches Problem hat (bei der
Havard-Architektur des AVR nicht unwahrscheinlich) ist das bestimmt
hilfreich.