Элемент инициализатора ошибки AVR GCC не является постоянным

Я использую Atmel Studio 6.2, чип xmega64D3, и у меня проблема с инициализацией некоторых полей структуры:

typedef struct
{
    uint32_t val;
    uint32_t inv;
    uint32_t xor;
}SPROTU32;

typedef struct
{
    SPROTU32 SerialNr;
    SPROTU32 SwVersion;
    SPROTU32 HwVersion;
    SPROTU32 ProdCode;
    SPROTU32 ProdDate;
    SPROTU32 PartNum;
}BasicData;

#define sw_high                     02
#define sw_low                      12
#define sw_ver                      ((sw_high << 16) + sw_low)

#define hw_high                     01
#define hw_low                      06
#define hw_ver                      ((hw_high << 16) + hw_low)

#define DEFAULT_SERIAL              0
#define DEFAULT_SW_VERSION          sw_ver
#define DEFAULT_HW_VERSION          hw_ver
#define DEFAULT_PROD_CODE           0
#define DEFAULT_PROD_DATE           0
#define DEFAULT_PART_NUM            05545410

EEMEM BasicData eeBasicData =
{
    {DEFAULT_SERIAL,~DEFAULT_SERIAL,DEFAULT_SERIAL^0x55555555},
    {DEFAULT_SW_VERSION,~DEFAULT_SW_VERSION,DEFAULT_SW_VERSION^0x55555555},
    {DEFAULT_HW_VERSION,~DEFAULT_HW_VERSION,DEFAULT_HW_VERSION^0x55555555},
    {DEFAULT_PROD_CODE,~DEFAULT_PROD_CODE,DEFAULT_PROD_CODE^0x55555555},
    {DEFAULT_PROD_DATE,~DEFAULT_PROD_DATE,DEFAULT_PROD_DATE^0x55555555},
    {DEFAULT_PART_NUM,~DEFAULT_PART_NUM,DEFAULT_PART_NUM^0x55555555}
};

Скомпилировать выходное изображение

Компилятор всегда говорит, что инициализатор не является константой. Итак, как я могу инициализировать свою структуру тем, что я хочу?


person Dima Calugari    schedule 17.02.2016    source источник
comment
Это поможет, если вы прикрепите вывод gcc -v. И SPROTU32 должен быть определен перед использованием, иначе он все равно даже не скомпилируется, поэтому исправьте это, пожалуйста.   -  person Konstantin Vladimirov    schedule 17.02.2016


Ответы (1)


попробуйте использовать операцию умножения вместо операции ‹‹

 #define _VERSION(h,l) ((h * 65536) | l)
 #define DEFAULT_SW_VERSION _VERSION(sw_high, sw_low)
person MCv    schedule 17.02.2016