Я пытаюсь создать таблицу модуля для своего приложения.
/*** MODULE TABLE DEFINTION ***/
struct ModuleInfo
{
char use_module; // 0 = don't use, 1 = use, -1 for end of list
char module_name[64]; // english name of module
int(*module_init)(void); // module initialization callback
void(*module_tick)(void); // module tick callback
void(*module_end)(void); // module end callback
void *config_table; // config table
};
/*** MODULE TABLE ***/
const struct ModuleTable module_table[] = {
{
1, "GPS/NMEA over RS232",
gps_nmea_rs232_init,
gps_nmea_rs232_tick,
gps_nmea_rs232_end,
NULL
},
// end table
{
-1, NULL, NULL, NULL, NULL
}
};
Таблица хранит список модулей, с указателями на инициализацию, галочку и функции завершения, которые назовут в соответствующих интервалах.
Я создаю это использование MPLAB C30, который является версией GCC 3.23 (я думаю?) для определенных микроконтроллеров PIC.
Однако, когда я пытаюсь скомпилировать это, я добираюсь:
In file included from main.c:3:
modules.h:67: error: array type has incomplete element type
Таблица должна быть константой, если возможный, потому что у меня есть много из (редактирование: ROM) запчасть и не очень (редактирование: RAM) запчасть. Я не могу выяснить, почему это не работает.
Собственно в этом и проблема ...
объявление
const struct ModuleTable module_table[] = ...
допустимой конструкцией C без явного определения struct ModuleTable; вот почему ваш код не работает, измените эту строку на
const struct ModuleInfo module_table[] = ...
{
-1, NULL, NULL, NULL, NULL
}
не хватает значения, не так ли? Я насчитал шесть полей в структуре.