在我的代码中,控制从中断服务例程跳转到某个 X 函数。执行该 X 函数后,它正在重置,因为它不知道应该返回到哪里。你能告诉我从中断服务程序跳转到函数 X 时我需要注意哪些寄存器吗?
场景:
Function m() {
Function x();
}
Function x() {
Step1:
Step2:call Function Y();
Step3:
}
Function y() {
Step1:Enable interrupt;
Step2:call function z();
step3:disable interrupt;
}
interrupt() {
Step1:Jump Step 3 of function x();
}
说明:函数 Z 应该在一段时间内执行,所以我使用定时器中断来实现超时。我在中断服务例程中给出函数 x() 地址的第 3 步,以便控制在特定时间段后返回(通过更改 PC 地址实现跳转)。
硬件:NEC V850E2 处理器、GHS 编译器。 软件:嵌入式C。
最佳答案
如果GHS compilers与 GCC 非常兼容(正如他们声称的那样),他们可能拥有 GCC __builtin_return_address
(但这不是标准,而是特定于 GCC)。
也许您的目标系统受最近的 GCC 支持?如果是,那么从源代码构建 GCC 可能是值得的。
否则您需要编写自己的汇编代码。
关于c - 如何知道函数的返回地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8094024/