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

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

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

目 录CONTENT

文章目录

UCOSIII软件定时器

thinkTV
2023-07-25 / 0 评论 / 0 点赞 / 119 阅读 / 772 字 / 正在检测是否收录...

1. 软件定时器简介

定时器:

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

硬件定时器

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

软件定时器:

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

软件定时器优缺点

优点:

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

缺点:

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

2. 单次定时器和周期定时器

UCOSIII提供了两种软件定时器:

单次定时器

  • 单次定时器的一旦定时超时,只会执行一次其软件定时器超时回调函数,不会自动重新开启定时,不过可以被手动重新开启。

周期定时器

  • 周期定时器的一旦启动以后就会在执行完回调函数以后自动的重新启动 ,从而周期地执行其软件定时器回调函数。

3. 软件定时器4种状态:

图片-1690271582217

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

UCOSIII软件定时器特点

  • 支持裁剪:软件定时器支持裁剪, 如需使能软件定时器,需将OS_CFG_TMR_EN配置项配置成 1
  • 注意:软件定时器的超时回调函数是由软件定时器服务任务调用的,软件定时器的超时回调函数本身不是任务,因此不能在该回调函数中使用可能会导致任务阻塞的 API 函数。
  • 软件定时器的频率由宏OS_CFG_TMR_TASK_RATE_HZ决定,要注意软件定时器的频率并不等于系统时钟节拍的频率,但软件定时器是依靠系统节拍实现定时的,所以需要进行换算:

图片-1690271674832

4. UCOSIII软件定时器相关API函数

图片-1690272322547

void OSTmrCreate( OS_TMR* 				p_tmr,
			  CPU_CHAR* 			p_name,
			  OS_TICK 				dly,
			  OS_TICK 				period,
			  OS_OPT 				opt,
			  OS_TMR_CALLBACK_PTR 	p_callback,
			  void* 				p_callback_arg,
			  OS_ERR* 				p_err	) 

图片-1690272921617

单次软件定时器的时序图

图片-1690273110258

周期软件定时器的时序图

图片-1690273127498

4.1 删除一个软件定时器

CPU_BOOLEAN OSTmrDel( OS_TMR* p_tmr , OS_ERR* p_err) 

图片-1690273824018

4.2 停止软件定时器定时

CPU_BOOLEAN OSTmrStop( OS_TMR* 	p_tmr,
				   OS_OPT 	opt,
				   void* 		p_callback_arg,
				   OS_ERR* 	p_err ) 

图片-1690273858233

0

评论区