虽然确认条件,但循环永远不会结束

时间:2015-12-31 12:23:37

标签: loops while-loop

我有一个while循环的问题。 我已经用这种方式定义了一个全局标志:

bool data_read_rdy = false;

在我的中断中,这个值以这种方式从false变为true

data_read_rdy = true;

我有一个等待直到data_read_rdy变为true的函数,然后再次将此值设置为false并退出。

void function(void)
{   
    while(!data_read_rdy);

    data_read_rdy = false;      
}

我的问题是,如果我一步一步地调试,这很有效。但是如果让代码运行它会在这个while循环函数中阻塞,并且永远不会退出,尽管data_read_rdy的值为true。为什么?

1 个答案:

答案 0 :(得分:0)

解决了宣告标志:

bool data_read_rdy = false;

以volatile为:

volatile bool data_read_rdy = false;

问题是编译器优化代码检查,而循环条件只有一次可能我的中断尚未断言。设置volatile它会检查条件,直到它验证然后退出循环。