如果语句在无限循环stm32内不起作用

时间:2017-07-20 20:41:11

标签: c

我正在使用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。

1 个答案:

答案 0 :(得分:2)

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

解决方案是oldSecondsvolatileSeconds,并确保SysTick_IRQHandlerHAL_SYSTICK_Callback函数中的volatile增加。< / p>

解决方案也是将优化设置为0级。但是,如果您不遵循python:3规则,可以看到会发生什么情况,最好保持在3级。