作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在编写一些嵌入式代码以通过 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/
我是一名优秀的程序员,十分优秀!