MCU C++ 程序具有无休止的循环,没有副作用 UB?

MCU C++ programm with endless-loop without side-effects allways UB?

提问人:wimalopaan 提问时间:8/23/2023 更新时间:8/23/2023 访问量:52

问:

以下代码

int main() {
    while(true);
}

是 C++ 中的 UB。但这是 MCU 编程中的常见做法:存在一个无休止的循环,所有工作都在 ISR(中断服务例程)中完成。main()

问题是,如果在

void ISR() {
    // side-effects
}

int main() {
    while(true);
}

由于 UB,可以删除无休止的循环。在大多数 MCU 中,这会导致 MCU 重新启动。

或者这只是不符合标准的 C++ 代码,因为它包含一个 ISR:C++-Standard 没有提到 ISR,它只提到信号处理程序安装程序。signal()

C++ 循环 中断 未定义行为 的 MCU

评论

2赞 Paul Sanders 8/23/2023
是的,它的正式名称是UB。合适的解决方法可能是:在全局范围内,然后在 .volatile int i;while (true) i = 42;main
0赞 Red.Wave 8/23/2023
嵌入式环境有不同的要求。这种情况通常由编译器开关处理(在项目设置中调整)。在跨 IDE 中,默认设置是嵌入式首选项;应显式手动选择标准设置。另一方面,从入口点(函数)返回最终是一个副作用;因此,恕我直言,不应将无限循环视为 UB。main
1赞 dimich 8/23/2023
一些 MCU 具有暂停/睡眠指令。使用它不仅可以消除UB,还可以降低空闲功耗。

答: 暂无答案