从0到1学习FreeRTOS:FreeRTOS 内核应用开发:(五)任务管理 NO.1 概念讲解

从0到1学习FreeRTOS:FreeRTOS 内核应用开发:(五)任务管理    NO.1 概念讲解

目录

一、任务的基本概念:

二、任务调度器的基本概念:

三、任务状态概念:

四、任务状态迁移:


一、任务的基本概念:

       ① 在任何时刻,只有一个任务得到运行FreeRTOS调度器决定运行哪个任务。调度器在合适的时候启动、停止一个任务宏观看上去所有的任务都在同时在执行这其实就是任务的切换。

       ② 任务切入/出时保存上下文环境

       ③ 每个FreeRTOS任务都需要有自己的栈空间

       ④ FreeRTOS中的任务是抢占式调度机制,也支持时间片轮转调度方式。

       ⑤ 任务通常会运行在一个死循环中,也不会退出,如果一个任务不再需要,可以调用FreeRTOS中的任务删除API函数接口显式地将其删除。

二、任务调度器的基本概念:

       ① FreeRTOS中提供的任务调度器是基于优先级的全抢占式调度:在系统中除了中断处理函数、调度器上锁部分的代码和禁止中断的代码是不可抢占的之外,系统的其他部分都是可以抢占的

       ② 当有比当前任务优先级更高的任务就绪时,当前任务将立刻被高优先级任务抢占处理器运行 

       ③ FreeRTOS内核中也允许创建相同优先级的任务。相同优先级的任务采用时间片轮转方式进行调度时间片轮转调度仅在当前系统中无更高优先级就绪任务存在的情况下才有效

       ④ 任务调度的原则是一旦任务状态发生了改变,并且当前运行的任务优先级小于优先级队列组中任务最高优先级时,立刻进行任务切换。

三、任务状态概念:

       ① 就绪(Ready):该任务在就绪列表中,就绪的任务已经具备执行的能力,只等待调度器进行调度,新创建的任务会初始化为就绪态。

       ② 运行(Running):该状态表明任务正在执行,此时它占用处理器,FreeRTOS调度器选择运行的永远是处于最高优先级的就绪态任务,当任务被运行的一刻,它的任务状态就变成了运行态

       ③ 阻塞(Blocked):如果任务当前正在等待某个时序或外部中断,我们就说这个任务处于阻塞状态,该任务不在就绪列表中。包含任务被延时、任务正在等待信号量、读写队列或者等待读写事件等

       ④ 挂起(Suspended:处于挂起态的任务对调度器而言是不可见的,让一个任务进入挂起状态的唯一办法就是调用 vTaskSuspend()函数;而 把 一 个 挂 起 状态 的 任 务 恢复的 唯 一 途 径 就 是 调 用 vTaskResume() vTaskResumeFromISR()函数

四、任务状态迁移:

(1): 创建任务→就绪态(Ready):

        任务创建完成后进入就绪态,表明任务已准备就绪,随时可以运行,只等待调度器进行调度。
(2): 就绪态→运行态(Running):

        发生任务切换时,就绪列表中最高优先级的任务被执行,从而进入运行态。
(3): 运行态→就绪态:

        有更高优先级任务创建或者恢复后,会发生任务调度,此刻就绪列表中最高优先级任务变为运行态,那么原先运行的任务由运行态变为就绪态,依然在就绪列表中,等待最高优先级的任务运行完毕继续运行原来的任务(此处可以看做是 CPU 使用权被更高优先级的任务抢占了)。
(4): 运行态→阻塞态( Blocked):

        正在运行的任务发生阻塞(挂起、延时、读信号量等待)时,该任务会从就绪列表中删除,任务状态由运行态变成阻塞态,然后发生任务切换,运行就绪列表中当前最高优先级任务。
(5): 阻塞态→就绪态:

        阻塞的任务被恢复后(任务恢复、延时时间超时、读信号量超时或读到信号量等),此时被恢复的任务会被加入就绪列表,从而由阻塞态变成就绪态;如果此时被恢复任务的优先级高于正在运行任务的优先级,则会发生任务切换,将该任务将再次转换任务状态,由就绪态变成运行态。
(6) (7) (8):就绪态、阻塞态、运行态→挂起态(Suspended):

        任务可以通过调用 vTaskSuspend() API 函数都可以将处于任何状态的任务挂起,被挂起的任务得不到CPU 的使用权,也不会参与调度,除非它从挂起态中解除。
(9): 挂起态→就绪态:

        把一个挂起状态的任务恢复的唯一途径就是调用 vTaskResume() 或 vTaskResumeFromISR() API 函数,如果此时被恢复任务的优先级高于正在运行任务的优先级,则会发生任务切换,将该任务将再次转换任务状态,由就绪态变成运行态。
 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值