Hallo,
ich habe bis jetzt tinymenu (link) als Menüsystem verwendet. Das System funktioniert auch sehr gut, hat aber zwei entscheidene Nachteile:

1. Die Daten werden im SRAM abgelegt, nicht im PRGMEM. Das ist nicht
allzu tragisch, weil ich viel Speicher habe (4k) und mein Menü nicht
allzu groß wird.
2. Die Daten sind statisch in structs abgelegt und lassen sich nicht nachträglich, während des Programmablaufs befüllen. Es geht darum, dass ein Teil des Menüs im EEPROM liegt. Das Problem ist jetzt, dass ich nicht weiß, wie ich das System modifizieren soll, weil ich bei Pointern, Structs und Arrays in Kombination einfach noch nicht so geübt bin.

Hier sind die Typedefinitions:

Code:
// So sieht ein (Sub-)Menu aus:
typedef struct menu_s {
  uint8_t top_entry;        //  top displayed entry
  uint8_t current_entry;    // currently highlighted entry
  uint8_t num_entries;      //  total # of entries in menu
  struct menu_s *previous; // previous menu (for backtracking)
  menu_entry_t entry[];
} menu_t;

// Und so ein Eintrag (entry)
typedef struct menu_entry_s {
  uint8_t flags;                             // see flag definitions above
  void (*select)(void *arg, char *name);  // routine to call when selected
  char name[MENU_ENTRY_NAMELEN];            // name to display for this entry
  void *value;                              // value to pass to select function
} menu_entry_t;

Kann man das Ganze überhaupt nach meinen Bedürfnissen umstricken, oder muss man sich über ein neues Konzept Gedanken machen? Gibt es evtl. fertige Lösungen?

Ich freue mich auf konstruktive Vorschläge. Gruß, Sven