我正在尝试为atmega328p micro创建一个多线程内核,因为我需要知道堆栈指针是如何工作的。
答案 0 :(得分:1)
最有可能的是,你的函数正确地被内联,所以一切都在setup()
中直接完成,没有涉及函数调用。如果要强制禁用它们的内联(以查看堆栈指针更改),则可以应用gcc noinline
属性。
void __attribute__ ((noinline)) func1() {
...
}
如果这仍然不起作用,gcc可能无论如何应用尾调用优化。在这种情况下,使您的函数不易于进行此优化的简单方法是在调用之前和之后打印SP
。