В настоящее время я работаю над файловой структурой EEprom, которая при компиляции заполняется значениями по умолчанию. Пока все работает отлично, за исключением одной структуры, и я не могу найти ошибку ..
typedef struct { // ===== instance parameters =====
BOOL bInstanceActive;
BYTE nInstanceGrp[4];
BYTE nEventFilter;
BYTE nEventScheme;
BYTE nEventPriority;
BYTE nShortMul;
BYTE nDoubleMul;
BYTE nRepeatMul;
BYTE nStuckMul;
BYTE nDummy[3];
} InstanceBlock;
#define DEFAULT_INSTANCE_BLOCK {1, {255,255,255,255}, 244, 0, 2, 15, 5, 10, 30, {0}}
Типы «BOOL» и «BYTE» являются беззнаковыми символами.
различные структуры затем объединяются в одну структуру EEprom_Mapping (но в настоящее время у меня есть только одна, все остальные работают нормально):
typedef struct {
InstanceBlock xInstance[1]; ** edited should be 1 instead of 0
} EEprom_Mapping;
#define DEFAULT_EEprom_Mapping { DEFAULT_INSTANCE_BLOCK }
Затем инициализируется следующим образом:
EEprom_Mapping xEE __attribute__((section(".eeprom"))) = DEFAULT_EEprom_Mapping;
Сообщение об ошибке «слишком много инициализаторов для« InstanceBlock [0] »»
Заранее благодарю за любую помощь.
Для вашего второго скрытого вопроса, с 4 элементами, вы пропустите несколько скобок:
// Note double brackets
#define DEFAULT_EEprom_Mapping {{ DEFAULT_INSTANCE_BLOCK, DEFAULT_INSTANCE_BLOCK, DEFAULT_INSTANCE_BLOCK, DEFAULT_INSTANCE_BLOCK }}
В самом деле, xInstance
это массив внутри структуры, поэтому вам нужны скобки для списка инициализаторов структуры и скобки для списка инициализаторов массива.
Ваш массив xInstance
массив размеров 0
Таким образом, компилятор жалуется, потому что вы пытаетесь вписать в него один элемент.