waschtl
03.01.2011, 21:11
Hi,
das ist eigentlich weniger ein spezielles Problem mit dem Nibobee oder der nibobee lib. Viel eher liegt es wohl an meinen eingerosteten C- Kenntnissen. Ich bin gerade dabei ein kleines einfaches Menü für die bgx1- Erweiterung zu erstellen. Vor einiger Zeit habe ich das schon mal mit dem AVR- Butterfly gemacht. Daher möchte ich das gerne erst einmal ähnlich wieder ans laufen bekommen. Damit ich mit den Menütexten nicht zu viel Speicher verschwende sollen die im Flash abgelegt werden. Was habe ich bisher gemacht?
Texte für Menüs werden im Flash abgelegt und in einem Array gespeichert. Aus der Main-Funktion kann ich auch drauf zugreifen:
//Menü im Flash ablegen
const char MENU_2_TXT_1[] PROGMEM = "submenu p1\n";
const char MENU_2_TXT_2[] PROGMEM = "submenu p2\n";
const char MENU_2_TXT_3[] PROGMEM = "submenu p3\n";
const char *SUBMENU_1[] PROGMEM = {
MENU_2_TXT_1,
MENU_2_TXT_2,
MENU_2_TXT_3
};
int main(){
//initialisieren...
line_init();
while(!bgx1_init());
bgx1_reset();
bgx1_termClear();
bgx1_setIllumination(512);
bgx1_termGoto(0,0);
// start Programm
bgx1_termPrint("start\n");
bgx1_termPrint_P(SUBMENU_1[1]);
}
auf dem Display bekomme ich so den Unterpunkt ``submenu p2`` angezeigt. Meine Probleme fangen an wenn ich das Menü an eine andere Funktion weiterreichen möchte. Bei meiner Variante kann ich nicht mehr so einfach auf das übergebene array zugreifen. Hier mal eine Testfunktion in der ich auf ein übergebenes Array zugreifen möchte:
//Array mit Menü übergeben und auf Texte zugreifen
void testfunction(const char *arr[]){
bgx1_termPrint("testfunktion\n");
PGM_P text = (char*)pgm_read_word(&arr[1]);
bgx1_termPrint_P(text);
bgx1_termPrint("ende testfunktion\n");
}
Aufgerufen wird die Funktion aus der Main-Funktion mit ``testfunction(SUBMENU_1);`` ist das die einfachste Art auf die Elemente des Arrays zuzugreifen? Ich vermute das es mit Hilfe von ``bgx1_termPrint_P()`` auch einfacher gehen muss. Habe aber heute Abend echt keine Idee mehr wie ich das hübscher lösen kann.
Ich würde mich über den einen oder anderen Hinweis freuen
Sebastian
das ist eigentlich weniger ein spezielles Problem mit dem Nibobee oder der nibobee lib. Viel eher liegt es wohl an meinen eingerosteten C- Kenntnissen. Ich bin gerade dabei ein kleines einfaches Menü für die bgx1- Erweiterung zu erstellen. Vor einiger Zeit habe ich das schon mal mit dem AVR- Butterfly gemacht. Daher möchte ich das gerne erst einmal ähnlich wieder ans laufen bekommen. Damit ich mit den Menütexten nicht zu viel Speicher verschwende sollen die im Flash abgelegt werden. Was habe ich bisher gemacht?
Texte für Menüs werden im Flash abgelegt und in einem Array gespeichert. Aus der Main-Funktion kann ich auch drauf zugreifen:
//Menü im Flash ablegen
const char MENU_2_TXT_1[] PROGMEM = "submenu p1\n";
const char MENU_2_TXT_2[] PROGMEM = "submenu p2\n";
const char MENU_2_TXT_3[] PROGMEM = "submenu p3\n";
const char *SUBMENU_1[] PROGMEM = {
MENU_2_TXT_1,
MENU_2_TXT_2,
MENU_2_TXT_3
};
int main(){
//initialisieren...
line_init();
while(!bgx1_init());
bgx1_reset();
bgx1_termClear();
bgx1_setIllumination(512);
bgx1_termGoto(0,0);
// start Programm
bgx1_termPrint("start\n");
bgx1_termPrint_P(SUBMENU_1[1]);
}
auf dem Display bekomme ich so den Unterpunkt ``submenu p2`` angezeigt. Meine Probleme fangen an wenn ich das Menü an eine andere Funktion weiterreichen möchte. Bei meiner Variante kann ich nicht mehr so einfach auf das übergebene array zugreifen. Hier mal eine Testfunktion in der ich auf ein übergebenes Array zugreifen möchte:
//Array mit Menü übergeben und auf Texte zugreifen
void testfunction(const char *arr[]){
bgx1_termPrint("testfunktion\n");
PGM_P text = (char*)pgm_read_word(&arr[1]);
bgx1_termPrint_P(text);
bgx1_termPrint("ende testfunktion\n");
}
Aufgerufen wird die Funktion aus der Main-Funktion mit ``testfunction(SUBMENU_1);`` ist das die einfachste Art auf die Elemente des Arrays zuzugreifen? Ich vermute das es mit Hilfe von ``bgx1_termPrint_P()`` auch einfacher gehen muss. Habe aber heute Abend echt keine Idee mehr wie ich das hübscher lösen kann.
Ich würde mich über den einen oder anderen Hinweis freuen
Sebastian