STM32 Cube IDE 相同的变量声明 调试器的不同处理

问题描述

我全局声明这两个变量

uint8_t data_rcv_flg[1] = { 0 }; /* To avoid reuse of data */
uint8_t run[1] = { 0 };

我在 main 中使用这个变量,如下所示:

MODEM_ConfigTypeDef modem_cfg;
modem_cfg.buff = data;
modem_cfg.rcv_flag = data_rcv_flg;
 
PROTOCOL_ConfigTypeDef protocol_cfg;
protocol_cfg.run = run;

typedef 中的 where 声明为 uint8_t *。

变量完全相同,但调试器向我展示了这一点: Watch expression variables

我不明白为什么会有这种行为。因此,我的代码无法正常工作。

我需要 runuint8_t[] 而不是 uint8_t* 。我认为该声明是正确的,但我不明白为什么编译器和调试器会创建一个指针。 我注意到如果我不使用全局变量,编译器就不会创建它。但是在这种情况下,它会创建变量但类型错误

我的 IDE 使用此命令进行汇编:

-mcpu=cortex-m4 -g3 -c -x assembler-with-cpp --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb

这对于编译器:

-mcpu=cortex-m4 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32F446xx -DDEBUG -c -I../Drivers/CMSIS/Include -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Core/Inc -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb

有人能解释一下吗?

我尝试将变量的名称更改为 protocol_run,现在它可以工作了。我认为存在名称冲突,但我没有声明名称run 的变量。 此外,我在一个空项目中尝试了名称 run 并且它有效。 我无法解释为什么。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)