我有一个标志(作为全局变量),它在设置之前等待一段时间。我有一个while循环,等待标记设置,然后继续。全局变量的确设置为“1”,但是while循环不会退出,任何想法我做错了什么:

while (TC3Flag == 0); //Global Flag Variabe TC3Flag, 0 = Not Set, 1 = Set
TurnOnFive();
TurnOnTwelve();
TC3Flag = 0;

编辑我也尝试了相同的结果,我确实希望处理器在标志为0时不执行任何操作,并且在标志设置后仅调用TurnOnFive和TurnOnTwleve
    while (TC3Flag == 0) {}
    TurnOnFive();
    TurnOnTwelve();
    TC3Flag = 0;

编辑编辑:在TC3FLag声明中添加了挥发成分,将其修复。

最佳答案

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

关于c - While循环等待全局变量不触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46889124/

10-09 08:29