【发布时间】:2016-08-24 07:37:29
【问题描述】:
我目前正在研究一个 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]' 的初始化程序太多”
提前感谢您的帮助。
【问题讨论】:
-
它是 C 还是 C++?
-
嗯,一大于零。无论如何,C++ 不允许零长度自动存储数组。
-
请正确标记语言:这就是为什么这个原本不错的问题被否决了。
-
因此,根据您的编辑,并根据您的评论,如果您将
xInstance[0]更改为xInstance[1]他们就不再麻烦了,不是吗? -
是的,它解决了上面的问题@Garf365 也解决了 xInstance[4] 的另一个问题。感谢您的所有帮助,抱歉标记错误,这是我第一次在这里发帖。
标签: c++ struct avr atmelstudio