gpt4 book ai didi

c - 如何防止gcc在无限循环后优化掉代码?

转载 作者:行者123 更新时间:2023-12-04 08:08:21 24 4
gpt4 key购买 nike

我希望嵌入式设备在进入某个状态之前等待,直到我可以通过 JTAG 设置远程调试器以继续执行。
我试图通过将程序计数器设置为下一条指令来使用无限循环继续执行。
我使用了一个常量表达式,因为循环不会像 MSC06-C 中的 SEI CERT C 编码标准那样被优化为兼容示例:

while(1);
我的问题是 gcc 在同一函数中优化了此代码之后的所有内容,乍一看我发现没有 gcc 选项可以专门防止这种情况发生。
这是做我想做的正确方法吗?它是如何以正确的方式完成的?

最佳答案

我可能会做

volatile int keep_spinning = 1;
while (keep_spinning) ; // spin
这样编译器就不能证明循环是无限的,所以它不能删除它,也不能删除它后面的任何东西。
当您准备好时,它还为您提供了一种继续执行的便捷方法:只需使用远程调试器戳值 0进入变量 keep_spinning .
除了是 static 之外,如果您将其设为全局(或者可能是 volatile )可能会更方便.全局变量可能更容易被您的调试器找到,因为它们有符号,并且它们不太可能被错误的编译器错误地优化,就像下面 Eugene Sh. 的评论一样。

关于c - 如何防止gcc在无限循环后优化掉代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66109167/

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