首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >UCOS-III笔记(五)时间片调度与时间管理

UCOS-III笔记(五)时间片调度与时间管理

作者头像
一个平凡而乐于分享的小比特
发布2026-02-02 15:59:04
发布2026-02-02 15:59:04
1240
举报

🔥作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生,研究方向无线联邦学习 🎬擅长领域:驱动开发,嵌入式软件开发,BSP开发 ❄️作者主页:一个平凡而乐于分享的小比特的个人主页 ✨收录专栏:UCOS-III,本专栏为UCOS-III学习记录 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

UCOS-III笔记(五)

时间片调度

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

eg:

在这里插入图片描述
在这里插入图片描述

运行条件:

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

运行过程如下:

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

注意:

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

时间片相关API函数介绍:

代码语言:javascript
复制
void OSSchedRoundRobinCfg (CPU_BOOLEAN	 	 en,			//是否使能时间片调度,OS_TRUE使能,OS_FALSE失能
                           dflt_time_quanta  OS_TICK,		//默认的时间片长度
                           OS_ERR  			 *p_err			//指向接收错误代码变量的指针
                          )

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

时间管理

​ 一种建立在时钟节拍上,对操作系统任务的运行实现时间,进行管理的一种系统内核机制

​ 实际延迟时间取决于系统时钟节拍的频率:OS_CFG_TICK_RATE_HZ

时间管理相关API函数介绍:

OSTimeDly():以系统时钟节拍为单位进行任务延时
代码语言:javascript
复制
void OSTimeDly(  OS_TICK  dly,          //任务延时的系统时钟节拍数
                 OS_OPT  opt, 			//延时选项
                 OS_ERR *  p_err 		//指向接收错误代码变量的指针
              )

OPT选项介绍:

OS_OPT_TIME_DLY

任务延时的结束时刻为 OSTickCtr = OSTickCtr + dly

OS_OPT_TIME_TIMEOUT

任务延时的结束时刻为 OSTickCtr = OSTickCtr + dly

OS_OPT_TIME_MATCH

任务延时的结束时刻为 OSTickCtr = dly(绝对时间)

OS_OPT_TIME_PERIODIC

任务延时的结束时刻为 OSTickCtr = OSTCBCurPtr -> TickCtrPrev+dly

OSTimeDlyHMSM():以时、分、秒、毫秒为单位进行任务延时
代码语言:javascript
复制
void OSTimeDlyHMSM( CPU_INT16U 	hours,       //任务延时的小时数
					CPU_INT16U 	minutes,	 //任务延时的分钟数
					CPU_INT16U 	seconds,     //任务延时的秒数
					CPU_INT32U 	milli,		 //任务延时的毫秒数
					OS_OPT 		opt,		 //延时选项
					OS_ERR *	p_err )		 //指向接收错误代码变量的指针

使用该函数须将宏 OS_CFG_TIME_DLY_HMSM_EN 置1

OPT选项介绍:

OS_OPT_TIME_HMSM_STRICT

延时时间参数严格按照实际的时间格式 任务延时的小时数(0~99) 任务延时的分钟数(0~59) 任务延时的秒数(0~59) 任务延时的毫秒数(0~999)

OS_OPT_TIME_HMSM_NON_STRICT

延时时间参数无需严格按照实际的时间格式 任务延时的小时数(0~999) 任务延时的分钟数(0~9999) 任务延时的秒数(0~65535) 任务延时的毫秒数(0~4294967295)

OS_OPT_TIME_DLY

任务延时的结束时刻为 OSTickCtr = OSTickCtr + dly

OS_OPT_TIME_TIMEOUT

任务延时的结束时刻为 OSTickCtr = OSTickCtr + dly

OS_OPT_TIME_PERIODIC

任务延时的结束时刻为 OSTickCtr = OSTCBCurPtr -> TickCtrPrev + dly

OS_OPT_TIME_MATCH

任务延时的结束时刻为 OSTickCtr = dly

OSTimeDlyResume():恢复被添加到 Tick 任务链表中挂起延时的任务
代码语言:javascript
复制
void OSTimeDlyResume(	OS_TCB *		p_tcb,	//指向任务控制块的指针
                     	OS_ERR *		p_err 	//指向接收错误代码变量的指针
                    ) 

使用该函数须将宏 OS_CFG_TIME_DLY_RESUME_EN 置1

OSTimeDly() 和 OSTimeDlyHMSM() 的区别

注意:OSTimeDly() 和 OSTimeDlyHMSM() 功能类似,OSTimeDly() 是周期延时,OSTimeDlyHMSM() 是相对延时

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • UCOS-III笔记(五)
    • 时间片调度
      • OSSchedRoundRobinCfg():用于开启时间片调度,并设置时间片的默认值
    • 时间管理
      • OSTimeDly():以系统时钟节拍为单位进行任务延时
      • OSTimeDlyHMSM():以时、分、秒、毫秒为单位进行任务延时
      • OSTimeDlyResume():恢复被添加到 Tick 任务链表中挂起延时的任务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档