Hallo,
Danke erstmal.
Ich glaube, ich hab mich falsch ausgedrückt.
Sprinter, bei Deinem Beispiel klappt das, weil der Compiler die Adressen direkt einsetzen kann ? Kann das sein ?
Ich meine Hier:
Die Adressen stehen zu Kompilierzeit fest und müßen nicht im laufendem Betrieb geholt werden.Code:feld[0](); feld[1]();
Ich glaube, wenn man eine Variable bei dem Arrays verwenden würde würde es nicht klappen ?
Aber nochmal ein Beispiel:
Ich habe ein paar Strings in Flash gelegt:
dann eine Struktur :Code:const char menuhauptstr[] PROGMEM = "Hauptmenu"; const char menukontstr[] PROGMEM = "Kontrast"; const char menuhellstr[] PROGMEM = "Helligkeit"; const char menufrage[] PROGMEM = "Speichern ? ";
Zum Schluß ein Array mit diesen Strukturen im Flash:Code:struct MENU { const char *Menu_Name; uint8_t Entrie_up; uint8_t Entrie_down; uint8_t Entrie_right; uint8_t Entrie_left; void(*Menu_Funkt)(void); };
Will ich jetzt z.B. mit:Code:const struct MENU menu[] PROGMEM = { {menuhauptstr,3,1,10,15,Draw_Main}, {menuhellstr,0,2,10,15,Draw_Hell}, {menukontstr,1,3,10,15,NULL}, {menufrage,2,0,1,0,NULL} };
Meine Funktion aufrufen, klappt das nicht.Code:menu[i].Menu_Funkt();
Ich habe gelesen, daß man sich die Adresse zuerst mit (const char *)pgm_read_word(menu) holen muß, nur irgendwie krieg ich das nicht hin![]()
Ich hab es jetzt so gelöst, daß ich mein Array in RAM gelegt habe, dann geht alles wunderbar.
Ich glaub, entweder hab ich den Kapitel über Pointer bei Kernighan u. Ritchie oder die Harvald Architektur nicht verstanden.
Gruß Sebastian







Zitieren

Lesezeichen