FreeSTOS 任务永远不会被交换
FreeSTOS task never get swapped
根据 FreeRTOS 任务调度文档,即使任务当前正在执行并且没有调用任何阻塞函数,内核也可以交换任务。因此,一旦内核获得时钟节拍中断并正在执行其 ISR,它就可以安排另一个任务在此之后执行。
在我的 FreeRTOS 系统上,我启动了 5 个任务,每个任务都被编程为在某个时间点自行延迟,因此我可以看到所有任务都被换入和换出,并且每个任务都在某个时间点执行。但是,如果我在任务中进入无限循环,则该任务永远不会被换出。
这怎么可能?
首先您需要确保configUSE_TIME_SLICING已设置。这将启用循环调度程序,它允许调度程序执行您期望的操作。
另外它只会切换到另一个具有相同或更高优先级的任务。
根据 FreeRTOS 任务调度文档,即使任务当前正在执行并且没有调用任何阻塞函数,内核也可以交换任务。因此,一旦内核获得时钟节拍中断并正在执行其 ISR,它就可以安排另一个任务在此之后执行。
在我的 FreeRTOS 系统上,我启动了 5 个任务,每个任务都被编程为在某个时间点自行延迟,因此我可以看到所有任务都被换入和换出,并且每个任务都在某个时间点执行。但是,如果我在任务中进入无限循环,则该任务永远不会被换出。
这怎么可能?
首先您需要确保configUSE_TIME_SLICING已设置。这将启用循环调度程序,它允许调度程序执行您期望的操作。
另外它只会切换到另一个具有相同或更高优先级的任务。