我正在使用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。
答案 0 :(得分:2)
CubeMX默认提供优化级别3,如果变量不是易变的,但在上下文之外发生变化(如中断),则会导致问题。
解决方案是oldSeconds
和volatile
为Seconds
,并确保SysTick_IRQHandler
或HAL_SYSTICK_Callback
函数中的volatile
增加。< / p>
解决方案也是将优化设置为0级。但是,如果您不遵循python:3
规则,可以看到会发生什么情况,最好保持在3级。