堆栈指针的工作原理

How stack pointer works

我正在尝试为 atmega328p micro 制作一个多线程内核,为此我需要知道堆栈指针是如何工作的。

最有可能的是,您的函数被正确地内联,所以实际上一切都在 setup() 中直接完成,不涉及函数调用。如果你想强制禁用它们的内联(以查看堆栈指针的变化),你可以应用 gcc noinline 属性。

void __attribute__ ((noinline)) func1() {
    ...
}

如果这仍然不起作用,则可能是 gcc 无论如何都在应用尾调用优化。在这种情况下,使您的函数不易进行此优化的一种简单方法是在调用之前和 之后 打印 SP