【发布时间】:2012-07-27 00:10:16
【问题描述】:
我正在编写一些嵌入式代码以通过 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++11中你可以用constexpr解决这个问题。但有更多知识的人会引用标准的相关部分。
标签: c arrays compiler-errors