【问题标题】:While loop never ends despite condition is confirmed尽管条件得到确认,但循环永远不会结束
【发布时间】:2015-12-31 12:23:37
【问题描述】:

我的 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。为什么会这样?

【问题讨论】:

  • 你的循环是做什么的?我只能看到一个条件。
  • 听起来你需要了解volatile

标签: loops while-loop


【解决方案1】:

解决了声明标志:

bool data_read_rdy = false;

到 volatile 为:

volatile bool data_read_rdy = false;

问题是编译器优化代码检查while循环条件只有一次,也许我的中断还没有被断言。设置 volatile 它将检查条件,直到它验证然后退出循环。

【讨论】:

    猜你喜欢
    • 2016-07-31
    • 2011-01-20
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多