Da mein RAM im AT90USB1286 voll ist, möchte ich den Text der LCD
Menüpunkte im Flash ablegen. Das klappt auch soweit. Hier ein Beispiel
eines Menüs:
1 | static const char string_1[] PROGMEM ="1 SWR Alarm";
|
2 | ...
|
3 | static const char string_11[] PROGMEM ="0 Exit";
|
4 |
|
5 | const char * const level0_menu_items[] PROGMEM =
|
6 | {
|
7 | string_1, string_2, string_3,
|
8 | string_4, string_5, string_6,
|
9 | string_7, string_8, string_9,
|
10 | string_10, string_11
|
11 | };
|
Ich kann nun mit dem Aufruf
1 | lcd_scroll_Menu(Pointer auf Menü, menu_size, current_selection);
|
meine Funktion aufrufen in der die Daten vom level0_menu_items
dargestellt werden, wobei "Pointer auf Menü" erstmal null ist.
"Pointer auf Menü" soll später der Zeiger für das jeweilge Menü sein.
Jetzt habe ich aber weitere Menüpunkte und daher macht es wenig Sinn für
jeden Menüpunkt eine eigene Funktion zu erstellen. Daher dachte ich mir
es müsste doch auch mit Pointer gehen. Nur leider kenn ich mich damit
nicht gut genug aus und benötige hier Hilfe.
1 | void lcd_scroll_Menu(Pointer auf Menu, uint8_t menu_size, uint8_t current_choice)
|
2 | {
|
3 | char buffer[21];
|
4 | lcdGotoXY(0,1);
|
5 | strcpy_P(buffer, (PGM_P)pgm_read_word(&(level0_menu_items[current_choice])));
|
6 | lcdPrintData(buffer,strlen(buffer));
|
7 | _delay_ms(1000);
|
8 | }
|
menu_size soll später mit Leben gefüllt werden.
Kann mir jemand zeigen wie ich mit einer Funktion die Inhalte der
verschiedenen Menüpunkte anzeigen kann? Als Übergabe soll ein Zeiger auf
das jeweilige Array oder Menü sein.
Gruß Marc