use*_*624 4 c arrays compiler-errors
我正在编写一些嵌入式代码,通过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次(每个数组元素一次).
由于它们被定义为常数,我忽略了什么?
由于它们被定义为常数,我忽略了什么?
在使用const修饰符声明的C对象中,不是真常量.const的一个更好的名称可能是readonly- 它的真正含义是编译器不会让你改变它.并且您需要使用真常量来初始化具有静态存储的对象(我怀疑regs_to_read是全局的).
您可以尝试regs_to_read在其他任何使用该数组之前调用的函数中进行分配.