Слишком много инициализаторов для структуры

В настоящее время я работаю над файловой структурой 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] ""

Заранее благодарю за любую помощь.

2 ответа

Решение

Для вашего второго скрытого вопроса, с 4 элементами, вы пропустите несколько скобок:

// Note double brackets
#define DEFAULT_EEprom_Mapping  {{ DEFAULT_INSTANCE_BLOCK, DEFAULT_INSTANCE_BLOCK, DEFAULT_INSTANCE_BLOCK, DEFAULT_INSTANCE_BLOCK }}

демонстрация

В самом деле, xInstance это массив внутри структуры, поэтому вам нужны скобки для списка инициализаторов структуры и скобки для списка инициализаторов массива.

Ваш массив xInstance массив размеров 0Таким образом, компилятор жалуется, потому что вы пытаетесь вписать в него один элемент.

Другие вопросы по тегам