结构的初始值设定项太多

too many initializers for struct

我目前正在研究一个 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;

错误信息是"too many initializers for 'InstanceBlock [0]'"

在此先感谢您的帮助。

您的数组 xInstance 是一个大小为 0 的数组,因此编译器会报错,因为您试图在其中放入一个元素。

对于你的第二个隐藏问题,有 4 个元素,你漏掉了一些括号:

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

Demo

的确,xInstance是结构中的数组,所以你需要括号来表示结构的初始化列表,括号来表示数组的初始化列表。