微处理器上下文切换
Microprocessor context switch
我已经开始研究 FreeRTOS 并研究了任务上下文保存例程。该例程存储寄存器和堆栈指针。我的问题是关于不同线程中的堆栈。如果有一个线程执行编译器生成的 push 和 pops 怎么办?难道不能覆盖不同线程的堆栈吗?
必须为每个线程分配足够的堆栈用于其自己的调用堆栈加上上下文存储所需的。上下文存储所需的额外堆栈量 space 将取决于目标,但在 FreeRTOS 的具体情况下,常量 configMINIMAL_STACK_SIZE
将至少是该大小加上一些余量。
在中断上下文中使用线程堆栈的某些目标上,您还需要考虑中断对堆栈的使用。如果中断是可嵌套的;最坏的情况是所有中断在任何中断完成之前按优先级顺序变为活动状态 - 这可能是一种不太可能的情况,但你应该考虑。
的常见问题解答中提供了有关 FreeRTOS 堆栈分配的建议
我已经开始研究 FreeRTOS 并研究了任务上下文保存例程。该例程存储寄存器和堆栈指针。我的问题是关于不同线程中的堆栈。如果有一个线程执行编译器生成的 push 和 pops 怎么办?难道不能覆盖不同线程的堆栈吗?
必须为每个线程分配足够的堆栈用于其自己的调用堆栈加上上下文存储所需的。上下文存储所需的额外堆栈量 space 将取决于目标,但在 FreeRTOS 的具体情况下,常量 configMINIMAL_STACK_SIZE
将至少是该大小加上一些余量。
在中断上下文中使用线程堆栈的某些目标上,您还需要考虑中断对堆栈的使用。如果中断是可嵌套的;最坏的情况是所有中断在任何中断完成之前按优先级顺序变为活动状态 - 这可能是一种不太可能的情况,但你应该考虑。
的常见问题解答中提供了有关 FreeRTOS 堆栈分配的建议