而Loop等待全局变量不触发

Dav*_*ash 2 c embedded arm atmelstudio

我有一个标志(作为一个全局变量),它在设置之前等待一段时间.我有一个while循环,在继续之前等待标志设置.全局变量确实设置为'1'但是while循环没有退出,任何想法我做错了:

while (TC3Flag == 0); //Global Flag Variabe TC3Flag, 0 = Not Set, 1 = Set
TurnOnFive();
TurnOnTwelve();
TC3Flag = 0;
Run Code Online (Sandbox Code Playgroud)

编辑我也试过相同的结果,我希望处理器在标志为0时什么也不做,只在标志设置后调用TurnOnFive和TurnOnTwleve

    while (TC3Flag == 0) {}
    TurnOnFive();
    TurnOnTwelve();
    TC3Flag = 0;
Run Code Online (Sandbox Code Playgroud)

编辑编辑:添加volitile到TC3FLag声明修复它.

Vit*_*meo 11

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