我已经开始研究 FreeRTOS 并研究了任务上下文保存例程。此例程存储寄存器和堆栈指针。我的问题是关于不同线程中的堆栈。如果有一个线程执行编译器生成的推送和弹出怎么办。难道无法覆盖不同线程的堆栈吗?
线程分配足够的堆栈来用于其自己的调用堆栈以及上下文存储所需的堆栈。 上下文存储所需的额外堆栈空间量将取决于目标,但特别是在 FreeRTOS 的情况下,常量configMINIMAL_STACK_SIZE
至少是该大小加上一些余量。
在中断上下文中使用线程堆栈的某些目标上,还需要考虑中断的堆栈使用情况。 如果中断是可嵌套的;最坏的情况是所有中断在任何中断完成之前按优先级顺序变为活动状态 - 也许不太可能发生,但您应该考虑这种情况。
有关 FreeRTOS 堆栈分配的建议,请参阅常见问题解答 http://www.freertos.org/FAQMem.html#StackSize