FreeRTOS - -内部调度机制
FreeRTOS - -内部调度机制
一.调度机制概述
- 优先级
- 高优先级任务优先执行,可以抢断优先级低的任务
- 高优先级的任务不停止,低优先级的任务无法执行
- 同等优先级的任务,轮流执行(时间片轮转)
- 状态
- 运行态:running
- 就绪态: ready
- 阻塞: blocked (等待某件事情:可以是时间或者事件)
- 暂停:suspend (休息)
- 管理机制
- 取出要运行的任务
(1)按照从高到低的优先级排队,找到最高优先级的运行态、就绪任务,运行。【优先级4 – 0】
(2)如果大家平级,轮流执行:排队,链表前面的先运行,运行一个Tick后乖乖地去链表尾部排队;
4. 调度者
- Tick中断(1ms产生一个RTOS中断)
二.任务状态切换
1.通过readyList(就绪链表)和DelayList(延时链表)切换状态。
三.启动调度器的几种情况
1.可抢占情况时:
(1)情况一:调度器产生的空闲任务(IdleTask[优先级0])与需要执行的任务(Taskn)不在一个优先级时。
执行顺序:Task3->Task1->Task2
(2).情况二:调度器产生的空闲任务(IdleTask(优先级0))与需要执行的任务(Taskn)在一个优先级时。
执行顺序:Idle Task(一部分)->Task1->Task2->Task3->Idle Task(接着执行)
这种情况空闲任务影响到了任务的执行。Idle Task会运行一小段代码,然后主动礼让Task1运行。
2.不可抢占时
(1)没有时间片轮转,会一直做某事件,除非中途放弃运行。
(2)中途放弃运行任务
@1:主动放弃