【实时操作系统FreeRTOS】

发布于:2022-12-06 ⋅ 阅读:(330) ⋅ 点赞:(0)

一.调度机制概述

  1. 优先级
  • 高优先级任务优先执行,可以抢断优先级低的任务
  • 高优先级的任务不停止,低优先级的任务无法执行
  • 同等优先级的任务,轮流执行(时间片轮转)
  1. 状态
  • 运行态:running
  • 就绪态: ready
  • 阻塞: blocked (等待某件事情:可以是时间或者事件)
  • 暂停:suspend (休息)
  1. 管理机制
  • 取出要运行的任务
    (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:主动放弃
放弃


网站公告

今日签到

点亮在社区的每一天
去签到