Keil - 我的while循环不起作用

时间:2016-08-20 10:39:32

标签: while-loop arm keil

我在Keil上使用STM32F微控制器。我在whilefor循环上遇到问题。共享代码是我的错误部分。我的for或while循环不起作用。我留下了“step = 2”和“counter = 0”。我尝试了发布和调试模式。调试模式我看到这个结果看屏幕; systemtick = 5000之后的系统提示增加之后的步骤= 1(WaitData = 1)(systemtick = 0 waitdata = 0)但是for循环上的代码堆栈。

#include "stm32f4xx_hal.h"
#include <stdio.h>
#include <stdlib.h>

int step = 0;
int waitdata = 0;
int systemtick1 = 0;
int counter = 0;
void HAL_SYSTICK_Callback(void)
{
    if (WaitData == 1)
    {
        systemtick1++;
        if (systemtick1 == 5000)
        {
            step = 2;
            systemtick1 = 0;
            WaitData = 0;
        }
    }
}

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    HAL_Delay(2000);
    step = 1;
    WaitData = 1;

    for (; WaitData==1 ; ) // Or while (WaitData == 1);
    {
        asc++;
    }

    step = 3;
    while (1)
    {
    }
}

1 个答案:

答案 0 :(得分:2)

您在中断中更改的变量需要设置为volatile,因为您不知道编译器将如何优化它。

对变量的访问主要以顺序,可预测的方式完成。但是中断是不可预测的;因此,您需要使用volatile来更改正常&#34;程序&#34;之外的变量。流动。