Hallo, ich versuche verzweifelt mit Hilfe von pgm_read_word eine Funktion aufzurufen. Jedoch scheitere ich am Syntax. Wer kann mir weiterhelfen? Ohne Verwendung von PROGMEM lautete die zu ändernde Zeile (siehe unten) folgend: entry->select((uint8_t *)entry->value, entry->name);
1 | typedef struct menu_entry_s { |
2 | uint8_t flags; |
3 | void (*select)(uint8_t *value, char *name); // Funktionsaufruf |
4 | char name[12]; |
5 | void *value; |
6 | } PROGMEM menu_entry_t; |
7 | |
8 | |
9 | void menu_select(menu_context_t *context) |
10 | {
|
11 | menu_entry_t *entry; |
12 | |
13 | entry = &((*(context->menu->entry))[context->menu->current_entry]); |
14 | |
15 | if (pgm_read_byte(&entry->flags) & MENU_FLAG_SUBMENU) { |
16 | |
17 | menu_enter(context, (menu_t *)pgm_read_word(&entry->value)); |
18 | } else { |
19 | |
20 | |
21 | pgm_read_word(&entry->select) //<== Hier muss noch etwas umgebogen werden |
22 | (
|
23 | (uint8_t *)pgm_read_word(&entry->value), |
24 | (char *)pgm_read_word(&entry->name) |
25 | );
|
26 | }
|
27 | |
28 | }
|