Problema de inicialización de la matriz del compilador XC8

Estoy usando MPLAB X IDE con el compilador XC8 y me gustaría crear un sistema de menús para un módulo GLCD, pero tengo problemas para inicializar mi MainMenuItemsList[]matriz. No recibo un error al compilar, pero si estoy depurando el proyecto, puedo ver que solo se inicializa el primer elemento. ¿Cuál puede ser la causa?

Aquí está el fragmento de código relevante:

typedef struct menuitem
{
  char ItemName[10];
  void (*handler)(void);
  struct menu *ChildSubMenu;
}MenuItem;

typedef struct menu
{
  char MenuName[10];
  char NumberItems;
  //struct menu *ParentMenu;
  MenuItem *Items[12];
}Menu;

MenuItem MainMenuItemsList[12] = {  {"SubMenu1", NULL, NULL},
                                    {"SubMenu2", NULL, NULL},
                                    {"SubMenu3", NULL, NULL},
                                    {"SubMenu4", NULL, NULL},
                                    {"SubMenu5", NULL, NULL},
                                    {"SubMenu6", NULL, NULL},
                                    {"SubMenu7", NULL, NULL},
                                    {"SubMenu8", NULL, NULL},
                                    {"SubMenu9", NULL, NULL},
                                    {"SubMenu10", NULL, NULL},
                                    {"SubMenu11", NULL, NULL},
                                    {"SubMenu11", NULL, NULL}
                                };

Menu MainMenu = {"MainMenu",12,&MainMenuItemsList};
¿Cómo sabe que la matriz no se está inicializando correctamente? ¿Probaste en una pantalla LCD real? Algunas de las versiones posteriores de MPLAB X no muestran los valores correctos en la ventana de observación.
Sí, lo he probado. Las cadenas "MainMenu" y "SubMenu1" están escritas correctamente en la pantalla LCD, pero las otras matrices ItemName[10] están llenas de caracteres nulos en lugar de SubMenu2...11. (Por cierto, estoy usando MPLAB X v2.15)
No funcionará porque necesito una lista de estructuras, de ahí selecciono el primer miembro y escribo su nombre (SubMenu1) en la pantalla, luego elijo el segundo elemento, etc. Eso aparece en mi código así: Y la llamada void drawMenu(Menu *menuToShow, unsigned char selectedIndex) { ... glcd_puts(menuToShow->Items[i]->ItemName,8,i+1,0,1,-2); ... }de la función: drawMenu(&MainMenu, 0);Lo siento, pero no sé cómo formatear correctamente el bloque de código, pero lo intenté varias veces.
¿Nadie tiene una idea? He intentado esto también, pero no funcionó. enlace

Respuestas (1)

cuando define, MenuItem *Items[12];está creando una matriz de direcciones, no una dirección para una matriz de estructuras (que es lo que desea).

quita el "[12]":

typedef struct menu
{
  char MenuName[10];
  char NumberItems;
  MenuItem * Items;
}Menu;