gpt4 book ai didi

C 错误 : expression must have a constant value

转载 作者:太空狗 更新时间:2023-10-29 15:20:18 27 4
gpt4 key购买 nike

我正在编写一些嵌入式代码以通过 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 次(每个数组元素一次)。

既然它们被定义为常量,我忽略了什么?

最佳答案

Since they are defined as constants, what have I overlooked?

在 C 中,用 const 修饰符声明的对象不是真正的常量。 const 的更好名称可能是 readonly - 它的真正含义是编译器不会让 更改它。并且您需要真正的常量来初始化具有静态存储的对象(我怀疑 regs_to_read 是全局的)。

您可以尝试在其他任何使用该数组之前调用的函数中分配 regs_to_read

关于C 错误 : expression must have a constant value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11702629/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com