gpt4 book ai didi

c - MDK-ARM C : While loop won't break after interrupt

转载 作者:太空宇宙 更新时间:2023-11-04 01:45:38 25 4
gpt4 key购买 nike

我想在按下按钮后跳出主循环。

所以我更改了按钮按下中断中的 isRunning 值。但它没有用。

当我将代码 if(!isRunning){break;} 更改为 if(0 == isRunning){break;} 时,它将像 70%时间。

如果我在循环中输出 isRunning 值。它每次都会起作用。但是在等待 someOtherSignal 时我无法进行输出,因为它的任务时间太长,我在进行输出时可能会错过信号。

我想知道为什么它会这样。我该如何修复它。

在 main.h 中

extern UINT8 isRunning;

在主程序中

UINT8 isRunning;
....
//mainfunc
isRunning = 1;
output("before loop");
while(!someOtherSignal){
if(!isRunning){
break;
}
}
output("after loop");
....

在中断.c中

void buttonPress_Routine(){
isRunning = 0;
output(isRunning);//output 0 when button pressed;
}

最佳答案

编译器从代码中推断出您没有更改代码中的变量,因此它可以优化读取它。它不假设每个变量都可以在其他地方更改以提高效率。如果您将变量标记为 volatile,则意味着可以在本地代码之外修改该变量,并且不应将其优化掉。

所以把定义改成

UINT8 volatile isRunning;

会告诉编译器不要优化变量访问。

关于c - MDK-ARM C : While loop won't break after interrupt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54359587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com