我正在编写一些嵌入式代码以通过 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 次(每个数组元素一次)。
由于它们被定义为常量,我忽略了什么?