CH573 遇到一个特别奇怪的问题

主程序while如下:

int main(void)

{

         .

         .

         .

    flag = 0;

    while(1)

    {

        if(flag == 1)

        {

            PRINT("enter flag == 1");

            flag = 0;

        }

    }

}

会有一个中断,这个中断只触发一次,当进入这个中断时,flag=1。问题就出在这之后,使用上面这种while里面,明明flag=1了,但是就是进入不了if(flag == 1)里面。但是当while里面一个延迟或者语句,当中断使flag=1时,就能够进入if(flag == 1)里面了。

   while(1)

    {

        ①这里加延迟或者任意语句,nop都行

        if(flag == 1)

        {

            PRINT("enter flag == 1");

            flag = 0;

        }

    }

如果单独一个if,始终进不去,不知道这种事什么原因造成的?

在定义flag这个变量的时候是否添加了关键字volatile呢。


谢谢 TECH_Hy 加了之后就没问题了!请问这是什么原理


关于volatile的使用可以百度一下看看。


谢谢 TECH_Hy。了解了


只有登录才能回复,可以选择微信账号登录