我目前正在处理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]'"
的初始化程序过多提前感谢您的帮助。
答案 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 }}
实际上,xInstance
是一个结构内部的数组,所以你需要括号的初始化列表的结构和括号的初始化列表的数组。