侧边栏壁纸
博主头像
thinkTV博主等级

喜爱动漫的二刺螈一枚,摩托车云爱好者(快要有车了)。 懂一点技术的在读生物医学工程研究生( •̀ ω •́ )✧,多多指教。

  • 累计撰写 127 篇文章
  • 累计创建 17 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

UCOS-III基础知识

thinkTV
2023-07-06 / 0 评论 / 0 点赞 / 126 阅读 / 1,261 字 / 正在检测是否收录...

1. UCOS-III简介

  • µC/OS-III 的发音为“Micro C O S Three”,这意味着 µC/OS-III 是基于 C 语言编写的第三代小型操作系统
  • UCOSIII是一个可裁剪、可剥夺的多任务系统,没有任务数目的限制,是UCOS的第三代内核操作系统

图片-1688656205185

2. 任务调度简介

调度器就是使用相关的调度算法来决定当前需要执行的哪个任务

UCOSIII 一共支持两种任务调度方式:

  1. 抢占式调度
  • 主要是针对优先级不同的任务,每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务。
  1. 时间片调度
  • 主要针对优先级相同的任务,当多个任务的优先级相同且就绪时, 任务调度器会根据用户所设置的时间片轮流的运行这些任务;
  • 时间片是以一次系统时钟节拍为单位的。如 UCOS-III 默认设置的任务时间片为 100,则 UCOS-III 会在当前任务运行100次系统时钟节拍的时间后,切换到另一个相同任务优先级的任务中运行。

2.1 抢占式调度

运行条件:

  1. 创建三个任务:Task1、Task2、Task3
  2. Task1、Task2、Task3的优先级分别为3、2、1(在UCOS-III中任务优先级的数值越小,优先级越高,所以Task3的优先级最高)

图片-1688657911877

运行过程:

  1. 首先Task1在运行中,在这个过程中Task2就绪了,在抢占式调度器的作用下Task2会抢占Task1的运行
  2. Task2运行过程中,Task3就绪了,在抢占式调度器的作用下Task3会抢占Task2的运行
  3. Task3运行过程中,Task3被挂起了(系统延时或等待信号量等),此时就绪态中,优先级最高的任务Task2执行
  4. Task3阻塞解除了(延时到了或者接收到信号量),此时Task3恢复到就绪态中,抢占TasK2的运行

总结:

  • 高优先级任务,优先执行
  • 高优先级任务不停止,低优先级任务无法执行
  • 被抢占的任务将会进入就绪态

2.2 时间片调度

运行条件:

  1. 依次创建三个任务:Task1、Task2、Task3
  2. Task1、Task2、Task3的优先级均为1;即3个任务同等优先级
  3. Task1、Task2、Task3的时间片默认均设置为100

图片-1688658260792

运行过程:

  1. 首先Task1运行完100个时间片后,切换至Task2运行
  2. Task2运行完100个时间片后,切换至Task3运行
  3. Task3运行过程中(还不到100个时间片),Task3被挂起了(系统延时或等待信号量等),此时直接切换到下一个任务Task1
  4. Task1运行完100个时间片后,切换至Task2运行

总结:

  1. 同等优先级任务,轮流执行;时间片流转;
  2. 一个时间片大小,取决为滴答定时器中断频率;
  3. 每个任务都可以定义自身的时间片长度;
  4. 注意没有用完的时间片不会再使用,下次任务Task3得到执行还是按照100个时间片的时钟节拍运行。

3. 任务状态

3.1 UCOSIII中任务共存在5种状态:

  1. 运行态:正在执行的任务,该任务就处于运行态,注意在STM32中,同一时间仅一个任务处于运行态
  2. 就绪态:如果该任务已经能够被执行,但当前还未被执行,那么该任务处于就绪态
  3. 挂起态:如果一个运行态的任务因延时或等待某一事件发生时被挂起, 那么这个任务就处于挂起态
  4. 休眠态:任务已经在CPU的内存中了(任务被删除 了),但是还没有交给UCOSII内核管理
  5. 中断态:当处于运行态的任务被中断打断,CPU跳转去执行中断服务函数时,原本属于运行态的任务会切换到中断态,直到中断结束,在切换回运行态继续运行

3.2 任务状态任务5种基本状态之间的转换图:

图片-1688660569663

总结:
1、被创建的任务,初始状态均为就绪态
2、被删除的任务,会转为休眠态
3、仅就绪态和中断态可转变成运行态
4、其他状态的任务想运行,必须先转变成就绪

3.3 UCOS-III主要有三大类列表用来跟踪任务状态

图片-1688660679787

该32位的变量,当某个位,置一时,代表所对应的优先级就绪列表有任务存在

0

评论区