ucosIII任务管理(二)

任务管理的内部原理

5种基本任务状态

在这里插入图片描述

  • 休眠态:任务已经写入代码空间中,但是不受ucosIII管理。
    调用OSTaskCreate()函数创建任务后,该任务就受ucosIII管理。当不再需要用ucosIII管理某个任务时,调用OSTaskDel()函数删除任务。OSTaskDel()函数,并非删除任务代码,只是该任务不能获得CPU的使用权
  • 就绪态:任务准备运行时就会进入就绪态。通过任务就绪表记录就绪态任务,就绪表根据就绪态任务的优先级排序。调用OSTaskCreate()函数创建任务后,任务就进入就绪态
  • 运行态:单核CPU,仅有一个任务可以进入运行态
    调用OSSart()或OSIntExit()OS_TASK_SW()时,ucosIII就会切换最重要的就绪态任务,使其获得CPU的使用权
  • 等待态:任务处于等待状态时,就会被放入一个与该任务等待事件相对应的列表。
    任务等待某个事件发生时,不消耗CPU的时间。当任务等待的事件发生了,该任务就会被放入就绪表中。判断该任务是否为最重要任务,若是就会获得CPU的使用权。
    当调用OSTaskSuSpend()把当前任务挂起时,该任务就会进入等待态,并没有等待事件,只能调用OSTaskResume()将该任务恢复运行
  • 中断服务态:如果CPU允许被中断,那被中断时,当前运行任务就会被挂起,执行中断服务函数。中断服务函数一般很短,一般是发送信号量或者发送事件让任务级来做。
UCOSIII的内部状态机

在这里插入图片描述

  • 就绪:每个任务都希望就绪,进入就绪态是实现功能的唯一途径
  • 延时:调用OSTimeDly()函数,让任务等待一段时间,结束后又进入就绪态
  • 等待:调用pend函数,可以让一个任务等待某个事件发生,当事件发生了(执行对应的post函数)或等待事件对象被删除或其他任务决定中断等待过程,等待过程就会结束。任务就会变成就绪态
  • 超时检测的等待:任务在一段时间等待某一事件发生,若等待事件不发生,该任务也会进入就绪态,并该任务会被通知超时。当事件发生了(执行对应的post函数)或等待事件对象被删除或其他任务决定中断等待过程,等待过程就会结束,任务就会变成就绪态。
  • 被挂起:任务被挂起后就无法被获得CPU的使用权
  • 延时且被挂起:延时等待的任务也能够被其他任务挂起,这样的挂起效果累加。延时结束并且任务被恢复才可变为就绪态
  • 等待被挂起:正在等待某事件发生的任务也能够被其他任务挂起,这样的挂起的效果累加。当事件发生了(执行对应的post函数)或等待事件对象被删除或其他任务决定中断等待过程,等待过程就会结束,并且任务被恢复才可变为就绪态
  • 超时检测的等待且被挂起:也是挂起效果累加

任务控制块TCB

TCB是一种内核使用的数据结构,用来维护任务相关的信息,每个任务都必须有自己的任务控制块。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页