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

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

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

目 录CONTENT

文章目录

UCOSIII时间片调度

thinkTV
2023-07-17 / 0 评论 / 0 点赞 / 163 阅读 / 395 字 / 正在检测是否收录...

1. UCOSIII时间片调度举例

同等优先级任务轮流地享有相应的运行时间(可设置), 叫时间片,在UCOSIII中,一个时间片就等于SysTick 中断周期

条件:

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

图片-1689603011855

运行过程如下:

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

总结:

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

2. 时间片调度简介

时间片相关API函数介绍

void OSSchedRoundRobinCfg ( 	CPU_BOOLEAN   	en, 
				 	OS_TICK       		dflt_time_quanta,                            
				 	OS_ERR      		*p_err )

该函数用于开启时间片调度,并设置时间片的默认值

图片-1689603209711

注意: 使用时间片调度需把宏 OS_CFG_SCHED_ROUND_ROBIN_EN 置1

0

评论区