Ошибка C: выражение должно иметь постоянное значение

Я пишу некоторый встроенный код для взаимодействия с внешним устройством через SPI. Устройство имеет несколько регистров различной длины, и для упрощения я определил следующую структуру

typedef struct
{
    uint16_t    Signed          :1;  // Register is signed or unsigned
    uint16_t    CommLengthBytes :3;  // The width of the register in bytes 
    uint16_t    Address         :12; // Register address
}ts_register;

Затем я определил каждый регистр в моих источниках следующим образом

static const ts_register    SAGCYC      = {0, 1, 0x000};
static const ts_register    DISNOLOAD   = {0, 1, 0x001};
static const ts_register    LCYCMODE    = {0, 1, 0x004};
static const ts_register    IRMSA       = {0, 4, 0x31A};
static const ts_register    IRMSB       = {0, 4, 0x31B};
static const ts_register    VRMS        = {0, 4, 0x31C};

и т.п.

У меня есть функция, которая возьмет указатель на массив ts_registers и поставит в очередь передачи SPI, необходимые для чтения всех регистров в массиве и вызова функции обратного вызова для обработки ответа

Моя проблема возникает, когда я пытаюсь создать массив ts_registers, который я хочу прочитать, следующим образом:

ts_register regs_to_read[3] = {VRMS, IRMSA, IRMSB};

Это приводит к ошибке: «выражение должно иметь постоянное значение» 3 раза (один раз на элемент массива).

Так как они определены как константы, что я упустил из виду?

Ответы на вопрос(3)

Ваш ответ на вопрос