如何在STM32 Cube IDE中使用另一个全局变量Array中声明的全局变量而不会出现任何错误?

Posted

技术标签:

【中文标题】如何在STM32 Cube IDE中使用另一个全局变量Array中声明的全局变量而不会出现任何错误?【英文标题】:How to use a declared global variable in another global variable Array without any error in STM32 Cube IDE? 【发布时间】:2020-11-18 19:08:11 【问题描述】:

我正在为我开发的 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);

【问题讨论】:

meta.***.com/a/285557/7733418 请以文字形式提供minimal reproducible example。 感谢您通知我。我已根据您的 cmets 更改了问题 感谢文本形状的代码。现在请尝试 MRE。 【参考方案1】:

具有静态存储时长的数组的维度需要是一个整型常量表达式(如果数组定义有初始化器,则可以省略)。带有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];

【讨论】:

如果我使用它,它会在 bl 主线的 startup_stm32f401rctx.s 中抛出错误,错误是未定义对 main 的引用。如何克服这个 @Muthu 这是一个单独的问题。也许你忘了添加main 函数? 先生,我已经添加了它,但它仍然抛出错误。仅当我为全局变量创建宏时才会出现此错误。

以上是关于如何在STM32 Cube IDE中使用另一个全局变量Array中声明的全局变量而不会出现任何错误?的主要内容,如果未能解决你的问题,请参考以下文章

傻瓜式教程:如何使用“多合一”开发工具STM32CubeIDE

Stm32 CubeMx安装和配置Cube.ai教程

CMSIS & STM32,如何开始? [关闭]

如何使用 STM32CUBE HAL 库进行连续 i2c 读取

如何用keil5创建stm32的工程

STM32Cube_03使用GPIO点亮一个LED