gpt4 book ai didi

C18 : Will the compiler "know" a function call will never return?

转载 作者:行者123 更新时间:2023-11-30 14:20:36 27 4
gpt4 key购买 nike

我正在使用 C18 在 PIC18 上构建 16 状态 FSM。我正在考虑将每个状态作为其自己的函数,该函数会跳转到其他状态并被其他状态跳转。我很想在每个状态的末尾编写一个“state##();”的分支案例来确定程序应该去哪里,但我认为这会很快消失,因为编译器可能期望这样回归,而非永远分支;我的微 Controller 上的堆栈很快就会填满并最终溢出。

C18 是否足够聪明,知道我的函数调用永远不会返回,并相应地用 GOTO/JMP 而不是 CALL/BRANCH 替换指令?我知道 GOTO 存在于 C 中(出于可读性原因,通常强烈建议不要使用它),但我想不出比这里更合适的理由来使用它。我知道我可以用 _asm _endasm block 强制它转到 goto,但如果没有必要,我会省去这个麻烦。在 C 语言中,执行某个函数并且永不返回的最佳方式是什么?

当然,感谢所有帮助

最佳答案

您所说的似乎是某种递归设计,这是函数调用不断堆积的唯一方法。我认为您对状态机的工作原理没有正确的想法。尝试看看这个 C 语言中 FSM 的优秀模板:

C state-machine design

如果您想发布一些示例代码或您如何考虑实现它,我们可以提供更多帮助。

关于C18 : Will the compiler "know" a function call will never return?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15299680/

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