1. UCOSIII时间片调度举例
同等优先级任务轮流地享有相应的运行时间(可设置), 叫时间片,在UCOSIII中,一个时间片就等于SysTick 中断周期
条件:
- 创建三个任务:Task1、Task2、Task3
- Task1、Task2、Task3的优先级均为1;即3个任务同等优先级
- Task1、Task2、Task3的时间片默认均设置为100
运行过程如下:
- 首先Task1运行完100个时间片后,切换至Task2运行
- Task2运行完100个时间片后,切换至Task3运行
- Task3运行过程中(还不到100个时间片),Task3被挂起了(系统延时或等待信号量等),此时直接切换到下一个任务Task1
- Task1运行完100个时间片后,切换至Task2运行
总结:
- 同等优先级任务,轮流执行;
- 时间片流转;一个时间片大小,取决为滴答定时器中断频率;
- 每个任务都可以定义自身的时间片长度;
- 注意没有用完的时间片不会再使用,下次任务Task3得到执行还是按照100个时间片的时钟节拍运行
2. 时间片调度简介
时间片相关API函数介绍
void OSSchedRoundRobinCfg ( CPU_BOOLEAN en,
OS_TICK dflt_time_quanta,
OS_ERR *p_err )
该函数用于开启时间片调度,并设置时间片的默认值
注意: 使用时间片调度需把宏 OS_CFG_SCHED_ROUND_ROBIN_EN
置1
评论区