|
测试条件: 系统滴答时钟1ms。 FreeRTOS设定为抢占式调度。 两个任务,分别为Task1,任务优先级为2;Task2,任务优先级为1。 Task1任务 { xxx算法; delay(10); } Task2任务 { 大于10ms的for循环 delay(10); } 先执行Task1,执行到delay时,切换到Task2,由于Task2执行“大于10ms的for循环”,这个过程中Task1的延时已经过了,这种情况下FreeRTOS如何调度任务? |
微信公众号
手机版
评分
查看全部评分
这时候低优先级中即使已经在执行需要时间很长的算法,也会被操作系统的tick时钟或者其他中断给打断
这就是抢占式的调度,配置信息如下:
#define configUSE_PREEMPTION 1
同时FreeRTOS能支持同优先级任务,可以使用任务间的时间片调度算法(即相同优先级的任务使用时间片轮回调度算法),如下配置:
#define configUSE_TIME_SLICING 1