0

我正在为我开发的 PCB 开发固件。我使用的微控制器是STM32f401rct6。

我正在使用 SWD 接口和 Stlink 来刷新程序。

我已经声明了一个常量全局变量(TOTAL_IC),但是当我尝试在另一个全局变量数组(cell_asic bms_ic[TOTAL_IC];)中再次使用该变量时,它会抛出错误,但如果我在任何函数中使用它,它不是。但我不想在某个特定函数中使用它,因为该变量(TOTAL_IC)在整个程序中都使用。

如何消除此错误。我是初学者?

代码:

const uint8_t TOTAL_IC = 1; /* Global variable */

cell_asic bms_ic[TOTAL_IC]; /* this is where iam getting error */

LTC6811_init_cfg(TOTAL_IC, bms_ic);

for (uint8_t current_ic = 0; current_ic<TOTAL_IC; current_ic++)
{
    LTC6811_set_cfgr(current_ic,,REFON,ADCOPT,gpioBits_a,dccBits_a, dctoBits, UV, OV);
}

LTC6811_reset_crc_count(TOTAL_IC,bms_ic);

LTC6811_init_reg_limits(TOTAL_IC,bms_ic);
4

1 回答 1

2

具有静态存储持续时间的数组的维度需要是整数常量表达式(或者如果数组使用初始化器定义,则可以省略)。带有const限定符的变量不算作常数。它是一个无法修改的变量。您需要使用实际的整数常量,例如整数、枚举常量或仅包含整数常量的表达式作为数组维度。您可以使用扩展为其中之一的预处理器宏。

例如:

#define N_IC 1

const uint8_t TOTAL_IC = N_IC;

cell_asic bms_ic[N_IC];

您的程序中可能根本不需要该TOTAL_IC变量。您可能只需将其定义为宏:

#define TOTAL_IC 1

cell_asic bms_ic[TOTAL_IC];
于 2020-07-29T09:02:20.873 回答