我已经开始调查FreeRTOS并查看了任务上下文保存例程。该例程存储寄存器和堆栈指针。我的问题是关于不同线程中的堆栈。如果存在执行由编译器生成的推送和弹出的线程,该怎么办?是不是可以覆盖不同线程的堆栈?
答案 0 :(得分:2)
每个线程必须为其自己的上下文存储所需的调用堆栈 plus 分配足够的堆栈。上下文存储所需的额外堆栈空间量将取决于目标,但在具体的FreeRTOS情况下,常量configMINIMAL_STACK_SIZE
将至少为该大小加上一些余量。
在中断上下文中使用线程堆栈的某些目标上,您还需要通过中断来计算堆栈使用情况。如果中断是可嵌套的;最糟糕的情况是所有中断在任何完成之前按优先级顺序变为活动状态 - 可能是不太可能的情况,但你应该考虑。
有关FreeRTOS堆栈分配的建议,请参阅常见问题解答http://www.freertos.org/FAQMem.html#StackSize