Я пытаюсь сделать многопоточное ядро для Atmega328P Micro и для этого мне нужно знать, как работает указатель стека.
Скорее всего, ваши функции правильно встроены, так что все на самом деле делается прямо в setup()
, без вызовов функций. Если вы хотите принудительно отключить встраивание для них (чтобы увидеть изменение указателя стека), вы можете применить gcc noinline
приписывать.
void __attribute__ ((noinline)) func1() {
...
}
Если это все еще не работает, возможно, gcc все равно применяет оптимизацию хвостового вызова. В этом случае простой способ сделать ваши функции не склонными к такой оптимизации — это напечатать SP
как до, так и после вызов.
Других решений пока нет …