c - 如何知道函数的返回地址?

标签 c

在我的代码中,控制从中断服务例程跳转到某个 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/

相关文章:

c - 在 C 编程标准中,整数 "-127-1U"是什么意思?

c - 结构中的二维数组

Windows下C程序访问总线上的内容

c - 递归列出C中的目录

c - 文件处理和功能(更新文件)

c - 为什么 sem_wait 在 mac OSX 上不等待信号量?

c - 根据命令行参数为数组分配内存的正确方法是什么?

c - GCC:优化内存加载和存储

C strtok() 一旦到达文本文件中的换行符就会崩溃

c - 关闭描述符是否影响创建的守护进程