可抢占调度与合作调度模式
在FreeRTOS中,可以配置相应的宏configUSE_PREEMPTION来设置调度的模式。
含义
可抢占调度模式:
高优先级的任务可以打断低优先级的任务,只有当高优先级的任务进入阻塞或挂起时,低优先级的任务才可以执行。
合作调度模式:
禁止抢占,不论优先级高低,都遵循谁先来到,谁运行。前面的任务不进入阻塞或挂起,后面的任务就不能够执行。
宏开关
在FreeRTOSConfig.h中,设置宏开关。具体操作如下:
当这个宏为1时,设置为可抢占调度模式。
当这个宏为0时,设置为合作调度模式。
在FreeRTOS中,常用的设置为可抢占调度模式。
时间片轮转
在FreeRTOS中,可以配置相应的宏configUSE_TIME_SLICING来设置是否进行时间片轮转。
含义
时间片轮转对应的是同级别优先级的任务,这需要先设置为可抢占调度模式。
允许时间片轮转:
同级别的优先级的任务交替执行,交替执行的周期可以设置,默认为1ms。交替执行的周期设置可以查看博文“FreeRTOS_任务管理”中的“多任务交替执行的原理”章节,下面是博文链接:
禁止时间片轮转:
同级别的优先级的任务禁止交替执行,遵循谁先来到,谁运行。前面的任务不进入阻塞或挂起,后面的任务就不能够执行。
这时如果存在高优先级抢断,在高优先级运行完成之后,会进行一次任务调度。这时同级别优先级会切换下一个任务。模型如下:
宏开关
在FreeRTOSConfig.h中,设置宏开关。具体操作如下:
当这个宏为1时,设置为允许时间片轮转。
当这个宏为0时,设置为禁止时间片轮转。
在FreeRTOS中,常用的设置为允许时间片轮转。
空闲任务礼让
在FreeRTOS中,可以配置相应的宏configIDLE_SHOULD_YIELD来设置空闲任务是否礼让。
含义
空闲任务礼让对应的是 优先级为0的任务 与 空闲任务 之间的时间片流转关系,这需要先设置为可抢占调度模式和允许时间片流转。
空闲任务礼让:
空闲任务与其他任务一样,任务处理函数中也是一个while(1)。当使能礼让时,空闲任务只执行一次就触发一次调度,这样就将更多的时间分配给了其他的任务。
空闲任务不礼让:
设置为不礼让时,空闲任务与其他优先级为0的任务没有任何区别,正常的进行交替运行。
宏开关
在FreeRTOSConfig.h中,设置宏开关。具体操作如下:
当这个宏为1时,设置为允许空闲任务礼让。
当这个宏为0时,设置为禁止空闲任务礼让。
在FreeRTOS中,常用的设置为允许空闲任务礼让。