FreeRTOS的任务调度
通过将 configUSE_PREEMPTION 和 configUSE_TIME_SLICING 都设置 1,FreeRTOS可以同时支持基于优先级可抢占的调度和相同优先级任务时间片调度。
在这种配置方式下,任务会在以下时间点发生调度:
1、低优先级任务发送消息、事件或者信号量可以导致高优先级任务进入运行态。
该低优先级任务的发送消息、事件、信号量函数返回时,代表它再次进入运行态,也表示由其引起的高优先级任务执行已经完毕。
2、中断服务程序的发送消息、事件或信号量可以导致高优先级任务进入运行态。
3、时间片调度是由tick中断触发的,前提是中间没有发生其它引起调度操作或事件。
情况一:2个相同优先级的任务,Task_A 处于运行态,Task_B 处于ready态。
(a)此时发生了一个中断,或者 Task_A 往 Task_B 发送一个消息,都会触发任务调度,调度程序会使相同优先级的下一个任务,即 Task_B 获得运行,而 Task_A 进入ready态,虽然 Task_A 还没有运行完一个tick周期。
(b)当Task_A触发了一个更高优先级任务获得运行,该更高优先级任务执行完毕后,虽然Task_A还没有运行完一个tick周期,但调度程序会使相同优先级的下一个任务,即Task_B获得运行,而Task_A进入ready态。
情况二:2个相同优先级的任务 Task_A 和Task_B都处于ready态,一个更高优先级的 Task_C处于运行态。
&nbs

本文深入探讨了FreeRTOS和ThreadX两种实时操作系统在任务调度上的差异。FreeRTOS支持基于优先级的可抢占调度及时间片调度,而ThreadX则提供更精细的时分调度,确保相同优先级线程的执行时间一致性。
最低0.47元/天 解锁文章
2706

被折叠的 条评论
为什么被折叠?



