c - 虽然循环等待全局变量不触发

标签 c arm embedded atmelstudio

我有一个标志(作为全局变量)在设置之前等待特定时间过去。我有一个 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 声明中添加 volitile 修复了它。

最佳答案

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

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

相关文章:

c++ - STM32 ADC 值读数太高

为设备驱动程序创建自己的寄存器

c++ - 如何通过程序扫描系统内存?

objective-c - 点 (".") 运算符和箭头 ("->") 运算符在 C 与 Objective-C 中的使用

c - Linux环境下的ARM裸机开发

objective-c - 为什么 Xcode/LLVM 在为 ARM64 编译时优化此方法返回的变量

c++ - 剥离使可执行文件膨胀的未使用的运行时函数 (GCC)

客户端套接字无法使用轮询/选择接收数据

c++ - Mac 上的 Eclipse C/C++ 项目

c - 跳转到stm32f4上的第二个固件