首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >UCOS-III笔记(十)软件定时器

UCOS-III笔记(十)软件定时器

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

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

UCOS-III笔记(十)

软件定时器

定时器:从指定的时刻开始,经过一个指定时间,然后触发一个超时事件,用户可自定义定时器的周期

硬件定时器:芯片本身自带的定时器模块,硬件定时器的精度一般很高,每次在定时时间到达之后就会自动触发一个中断,用户在中断服务函数中处理信息。

软件定时器:是指具有定时功能的软件,可设置定时周期,当指定时间到达后要调用回调函数(也称超时函数),用户在回调函数中处理信息

软件定时器的优缺点:

优点:

  1. 硬件定时器数量有限,而软件定时器理论上只需有足够内存,就可以创建多个;
  2. 使用简单、成本低

缺点:

软件定时器相对硬件定时器来说,精度不高。 对于需要高精度要求的场合,不建议使用软件定时器

软件定时器特点:

  1. 可裁剪
  2. 单次和周期
  3. 超时执行回调函数
软件定时器的状态
  • 未使用态:当软件定时器被定义但还未被创建或软件定时器被删除时, 软件定时器就处于未使用态。
  • 停止态:当软件定时器被创建但还未开启定时器或被停止时,软件定时器就处于停止态。
  • 运行态:运行态的定时器,当指定时间到达之后,它的超时回调函数会被调用。
  • 完成态:当单次定时器定时超时后,软件定时器处于完成态。

注意:新创建的软件定时器处于停止状态 ,也就是未运行的!

单次定时器和周期定时器
  • 单次定时器:单次定时器的一旦定时超时,只会执行一次其软件定时器超时回调函数,不会自动重新开启定时,不过可以被手动重新开启。
  • 周期定时器:周期定时器的一旦启动以后就会在执行完回调函数以后自动的重新启动 ,从而周期地执行其软件定时器回调函数。
UCOSIII软件定时器特点

支持裁剪:软件定时器支持裁剪, 如需使能软件定时器,需将OS_CFG_TMR_EN配置项配置成 1

软件定时器的频率由宏OS_CFG_TMR_TASK_RATE_HZ决定,软件定时器是依靠系统节拍实现定时的,所以需要进行换算:

软件定时器时间分辨率 = OS_CFG_TICK_RATE_HZ / OS_CFG_TMR_TASK_RATE_HZ;

eg:

在例程中将宏OS_CFG_TMR_TASK_RATE_HZ设置为10,也就是软件定时器频率10HZ(100ms),假设现在开启一个定时时长为10的软件定时器,那么他大约在10 * 100ms = 1000ms后超时

软件定时器相关API函数

函数

描述

OSTmrCreate()

创建一个软件定时器

OSTmrDel()

删除一个软件定时器

OSTmrRemainGet()

获取软件定时器的剩余超时时间

OSTmrSet()

设置软件定时器的延时时间、周期、超时回调函数及其参数等

OSTmrStart()

开启软件定时器定时

OSTmrStateGet()

获取软件定时器的状态

OSTmrStop()

停止软件定时器定时

OSTmrCreate():创建一个软件定时器
代码语言:javascript
复制
void OSTmrCreate( OS_TMR* 				p_tmr,			//指向软件定时器结构体指针
                 CPU_CHAR* 				p_name,			//指向软件定时器名的字符串指针
                 OS_TICK 				dly,			//软件定时器的开启延时时间,注意单次定时器必须大于0
                 OS_TICK 				period,			//周期定时器的定时周期时间,注意周期定时器必须大于0 
                 OS_OPT 				opt,			//OS_OPT_TMR_ONE_SHOT(单次定时器)			
                 										//OS_OPT_TMR_PERIODIC(周期定时器)
                 OS_TMR_CALLBACK_PTR 	p_callback,		//指向超时回调函数的指针
                 void* 					p_callback_arg, //超时回调函数入口参数
                 OS_ERR* 				p_err			//接收错误代码
                ) 

单次软件定时器的时序图

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

单次定时器(dly > 0 ,period = 0)

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

多次重新触发单次定时器

周期软件定时器的时序图

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

周期定时器(dly = 0 ,period > 0)

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

周期定时器(dly > 0 ,period > 0)

OSTmrDel():删除一个软件定时器
代码语言:javascript
复制
CPU_BOOLEAN OSTmrDel( OS_TMR* p_tmr , 		//指向软件定时器结构体的指针
                     OS_ERR* p_err			//指向接收错误代码变量的指针
                    ) //返回值  OS_TRUE :软件定时器删除成功   OS_FALSE :软件定时器删除失败
OSTmrStart():开启软件定时器定时
代码语言:javascript
复制
CPU_BOOLEAN OSTmrStart( OS_TMR* p_tmr ,		//指向软件定时器结构体的指针
                       OS_ERR* p_err		//指向接收错误代码变量的指针
                      ) //返回值 OS_TRUE :软件定时器开启成功   OS_FALSE :软件定时器开启失败
OSTmrStop():停止软件定时器定时
代码语言:javascript
复制
CPU_BOOLEAN OSTmrStop( OS_TMR* 		p_tmr,			//指向软件定时器结构体的指针
                      OS_OPT 		opt,			//函数操作选项
                      void* 		p_callback_arg, //传给软件定时器超时回调函数的参数
                      OS_ERR* 		p_err 			//指向接收错误代码变量的指针
                     ) //返回值 OS_TRUE :软件定时器停止成功  OS_FALSE :软件定时器停止失败

opt

描述

OS_OPT_TMR_CALLBACK

执行一次回调函数,代入原始参数

OS_OPT_TMR_CALLBACK_ARG

执行一次回调函数,代入指定参数

OS_OPT_TMR_NONE

仅停止软件定时器

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • UCOS-III笔记(十)
    • 软件定时器
      • 软件定时器的状态
      • 单次定时器和周期定时器
      • UCOSIII软件定时器特点
      • 软件定时器相关API函数
      • OSTmrCreate():创建一个软件定时器
      • OSTmrDel():删除一个软件定时器
      • OSTmrStart():开启软件定时器定时
      • OSTmrStop():停止软件定时器定时
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档