Ошибка 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 раза (один раз на элемент массива).
Так как они определены как константы, что я упустил из виду?