【发布时间】:2019-12-15 20:47:42
【问题描述】:
我在 C 中有一个中断,它将调用“回调”函数。 CallBack 只有一行可执行代码,它调用了 YetAnotherFunction。
然后让 CallBack 使用普通的 C 调用约定(将返回地址推送到堆栈然后跳转到 YetAnotherFunction,)有没有办法可以在不推送的情况下跳转到 YetAnotherFunction?
Interrupt、CallBack 和 YetAnotherFunction 位于单独的文件中,并在链接时放入可执行文件中。
推理...
我有一个每秒被调用一百次的中断。反过来,它每秒调用 YetAnotherFunction 4 次。
我想让中断更通用,所以我想创建一个通用的回调函数。在一个项目中,CallBack 将调用 YetAnotherFunction。在其他项目中,它会简单地返回而不做任何工作。
这个,因为我想把中断例程放在我的通用库中,而且Callback在每个项目中可以是唯一的。
目前,在 CallBack 中,我使用 C 结构调用 YetAnotherFunction,但我想到会将返回地址压入堆栈,并且在从 YetAnotherFunction 返回时需要第二次“反弹”。虽然这并不多,但它冒犯了我的强迫症。
有没有一种方法可以从 CallBack 中直接跳转到 YetAnotherFunction 而无需将地址压入堆栈?这样,当从 YetAnotherFunction 返回时,直接返回给中断调用者。
感谢您的帮助,马克。
PS,我必须将 CallBack 或 YetAnotherFunction 声明为中断吗?从中断处理程序中调用函数时,我应该考虑任何隐藏的“陷阱”吗?
另外,我可能错误地使用了术语回调,但我想你明白了。
谢谢。 M.
【问题讨论】:
标签: callback stack interrupt goto