C语言 If语句在无限循环stm32中不起作用

bis0qfac  于 2023-10-16  发布在  其他
关注(0)|答案(2)|浏览(250)

我正在使用STM32 F030 R8 T6和HAL库。我使用STM32 CubeMX进行所有初始化代码。
当我在无限循环中使用“if”语句时,它不起作用。Eg.

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。

yv5phkfx

yv5phkfx1#

CubeMX默认提供3级优化,如果变量不是volatile而是在上下文之外更改(如中断),则会导致问题。
解决方案是将SecondsoldSeconds作为volatile,并确保SecondsSysTick_IRQHandlerHAL_SYSTICK_Callback函数中增加。
解决方案也是将优化设置为0级。但是,正如你所看到的,如果你不遵循volatile规则,会发生什么,最好停留在第3级。

3htmauhk

3htmauhk2#

我有这个问题很多次,然后我意识到,如果有一个if子句在while循环中发生问题。我在Keil上将优化级别改为0,然后问题就消失了。

相关问题