如何显式推送/弹出到C返回堆栈?

时间:2018-02-01 04:27:17

标签: c gcc stack forth

有没有办法明确地将数据推送/弹出到C返回堆栈? (理想情况下,在标准C中,但只有GCC的解决方案也可以。)

我在一个非常紧凑的RAM(kbytes,而不是Mbytes)的微控制器上实现C中的Forth。

我为数据堆栈分配RAM,但是我希望通过显式推送/弹出来共享带有C返回堆栈的Forth返回堆栈来节省一些RAM。

可以在C中完成吗?

3 个答案:

答案 0 :(得分:1)

GCC有__builtin_return_address功能,这可能是你最接近的功能。

答案 1 :(得分:0)

周围有许多FORTH-in-C系统,请求谷歌或在github中搜索。有许多设计问题(不仅仅是这一个!),你必须解决,看看以前的解决方案。

答案 2 :(得分:0)

我认为 Forth 是从 C 到汇编程序的一次旅行。可能有一个 c 寄存器用作堆栈指针。如果您在返回 C 之前注意正确清理该堆栈,您可能可以在您的汇编代码 (Forth) 中使用它。您必须研究 c 编译器以确保这是可能的并知道哪个寄存器是堆栈指针。还要注意恢复 c 想要保留的任何寄存器。