Пробую для STM32 , на IAR.
CODE
// структура для меню
typedef struct PROGMEM{
void *Next;
void *Previous;
void *Parent;
void *Child;
uint8_t Select;
const char Text[];
} menuItem;
#define MAKE_MENU(Name, Next, Previous, Parent, Child, Select, Text) \
menuItem Next; \
menuItem Previous; \
menuItem Parent; \
menuItem Child; \
menuItem Name = {(void*)&Next, (void*)&Previous, (void*)&Parent, (void*)&Child, (uint8_t)Select, { Text }}
#define NULL_ENTRY Null_Menu
menuItem Null_Menu = {(void*)0, (void*)0, (void*)0, (void*)0, 0, {0x00}};
enum {
MENU_CANCEL=1,
MENU_RESET,
MENU_MODE1,
MENU_MODE2,
MENU_MODE3,
MENU_SENS1,
MENU_SENS2,
};
// NEXT, PREVIOUS PARENT, CHILD
MAKE_MENU(m_s1i1, m_s1i2, NULL_ENTRY, NULL_ENTRY, m_s2i1, 0, "Запуск");
typedef struct PROGMEM{
void *Next;
void *Previous;
void *Parent;
void *Child;
uint8_t Select;
const char Text[];
} menuItem;
#define MAKE_MENU(Name, Next, Previous, Parent, Child, Select, Text) \
menuItem Next; \
menuItem Previous; \
menuItem Parent; \
menuItem Child; \
menuItem Name = {(void*)&Next, (void*)&Previous, (void*)&Parent, (void*)&Child, (uint8_t)Select, { Text }}
#define NULL_ENTRY Null_Menu
menuItem Null_Menu = {(void*)0, (void*)0, (void*)0, (void*)0, 0, {0x00}};
enum {
MENU_CANCEL=1,
MENU_RESET,
MENU_MODE1,
MENU_MODE2,
MENU_MODE3,
MENU_SENS1,
MENU_SENS2,
};
// NEXT, PREVIOUS PARENT, CHILD
MAKE_MENU(m_s1i1, m_s1i2, NULL_ENTRY, NULL_ENTRY, m_s2i1, 0, "Запуск");
и вот на строки
menuItem Null_Menu = {(void*)0, (void*)0, (void*)0, (void*)0, 0, {0x00}};
MAKE_MENU(m_s1i1, m_s1i2, NULL_ENTRY, NULL_ENTRY, m_s2i1, 0, "Запуск");
IAR выдаёт ошибку.
Error[Pe146]: too many initializer values
Что ему не нравится ?