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