我有一个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。为什么?
答案 0 :(得分:0)
解决了宣告标志:
bool data_read_rdy = false;
以volatile为:
volatile bool data_read_rdy = false;
问题是编译器优化代码检查,而循环条件只有一次可能我的中断尚未断言。设置volatile它会检查条件,直到它验证然后退出循环。