结构的初始化程序太多了

时间:2016-08-24 07:37:29

标签: c++ struct avr atmelstudio

我目前正在处理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"和#34; BYTE"都是unsigned char。

然后将不同的结构组合到一个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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

对于你的第二个隐藏问题,有4个元素,你会错过一些括号:

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

Demo

实际上,xInstance是一个结构内部的数组,所以你需要括号的初始化列表的结构和括号的初始化列表的数组。