调度机制概述
FreeRTOS的默认调度机制具有以下特点:
优先级不同
- 高优先级的任务优先执行,可以抢占低优先级的任务;
- 高优先级的任务不停止,低优先级的任务永远无法执行;
- 同等优先级的任务轮流执行(时间片轮转)
状态
- 运行态
- 就绪态
- 阻塞态
- 暂停态
通过链表深入理解调度机制
任务创建时,任务被加入就绪态链表尾部,具体流程如下所示:

上述示例中,实际创建了4个任务,xTaskStartScheduler函数会创建优先级为0的空闲任务。pxReadyTaskLists是一个链表数组,大小与优先级的数量相同。创建任务时,会根据任务的优先级把任务添加进相应链表的尾部。上述示例的链表情况如下所示:

执行时,从数组的高地址向低地址查找任务,并从链表的头部逐个取出任务进行执行。
任务的切换与Tick和PendSV中断有关,最终的切换在PendSV中断通过调用vTaskSwitchContext函数完成,与

本文详细阐述了FreeRTOS的默认调度机制,包括优先级处理、任务状态(运行态、就绪态、阻塞态、暂停态)以及任务切换过程,特别强调了Tick和PendSV中断在任务调度中的作用。

347

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



