gpt4 book ai didi

c - if 语句在 stm32 无限循环内不起作用

转载 作者:行者123 更新时间:2023-11-30 20:03:58 25 4
gpt4 key购买 nike

我正在使用 STM32F030R8T6 和 HAL 库。我使用 STM32CubeMX 来执行所有初始化代码。

当我在无限循环内使用“if”语句时,它不起作用。例如。

while (1) {
if ((Seconds - oldSec) >= 10) {
printf("Entramos 10sec\r\n");
oldSec = Seconds;
}
}

但是如果使用 HAL_Delay() 函数,它就可以工作。

while (1) {
HAL_Delay(1);
if ((Seconds - oldSec) >= 10) {
printf("Entramos 10sec\r\n");
oldSec = Seconds;
}
}

不知道是什么问题?

我使用arm-gcc编译器和makefile。

最佳答案

CubeMX 默认提供优化级别 3,如果变量不是 volatile 的但在外部上下文中发生更改(例如在中断中),这会导致问题。

解决方案是将 SecondsoldSeconds 设置为 volatile 并确保 Seconds 中增加SysTick_IRQHandler 或在 HAL_SYSTICK_Callback 函数中。

解决方案也是将优化设置为 0 级。但是正如您所看到的,如果不遵循 volatile 规则会发生什么,最好保持在 3 级。

关于c - if 语句在 stm32 无限循环内不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45224784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com