C 当循环等待全局变量未触发时

C 当循环等待全局变量未触发时,c,arm,embedded,atmelstudio,C,Arm,Embedded,Atmelstudio,我有一个标志(作为一个全局变量),它在设置之前等待一段时间。我有一个while循环,它在继续之前等待标志设置。全局变量确实设置为“1”,但while循环不退出,是否知道我做错了什么: while (TC3Flag == 0); //Global Flag Variabe TC3Flag, 0 = Not Set, 1 = Set TurnOnFive(); TurnOnTwelve(); TC3Flag = 0; 编辑我也尝试过同样的结果,我确实希望处理器在标志为0时不执行任何操作,并且只在设

我有一个标志(作为一个全局变量),它在设置之前等待一段时间。我有一个while循环,它在继续之前等待标志设置。全局变量确实设置为“1”,但while循环不退出,是否知道我做错了什么:

while (TC3Flag == 0); //Global Flag Variabe TC3Flag, 0 = Not Set, 1 = Set
TurnOnFive();
TurnOnTwelve();
TC3Flag = 0;
编辑我也尝试过同样的结果,我确实希望处理器在标志为0时不执行任何操作,并且只在设置标志后调用TurnOff和TurnOnTwleve

    while (TC3Flag == 0) {}
    TurnOnFive();
    TurnOnTwelve();
    TC3Flag = 0;

编辑:将volitile添加到TC3FLag声明中修复了它。

除非
TC3FLag
标记为
volatile
,否则编译器可以主动优化循环(或者假设它是无限循环)。您应该将
TC3Flag
标记为
volatile
,以便强制编译器在每次迭代时读取其内存地址处的值。

条件后有一个伪分号,以便循环没有正文。删除它。@MOehm我想这就是你的TC3Flag变量的意图,标记为
volatile
?由于该变量似乎能够在常规程序流之外更改,因此应该是.BTW谁正在更改
TC3Flag
?@MOehm while循环是一个繁忙的等待。分号应该在那里。