UCOSIII软件定时器

10 篇文章 1 订阅
9 篇文章 0 订阅

软件定时器工作模式:

软件定时器其实就是一个递减计数器,当计数器递减到 0 的时候就会触发一个动作,这个动作就是回调函数,当定时器计时完成时就会自动的调用这个回调函数。因此我们可以使用这个回调函数来完成一些设计。比如,定时 10 秒后打开某个外设等等,在回调函数中应避免任何可以阻塞或者删除定时任务的函数。

时间分辨率:定时器的步长,默认为100Hz。例如我们想延时1s,那么分辨率调成100即可。

创建一个定时器:
首先创建一个定时器,使用 OSTmrCreate()函数来创建一个定时器,这个函数也用来确定定时器的运行模式
OSTmrCreate()

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)

p_tmr : 指向定时器的指针,宏 OS_TMR 是一个结构体。
p_name: 定时器名称。
dly: 初始化定时器的延迟值。
period: 重复周期。
opt: 定时器运行选项,这里有两个模式可以选择。
OS_OPT_TMR_ONE_SHOT 单次定时器
OS_OPT_TMR_PERIODIC 周期定时器
p_callback: 指向回调函数的名字。
p_callback_arg: 回调函数的参数。
p_err: 调用此函数以后返回的错误码

单次定时器:

使用 OSTmrCreate()函数创建定时器时把参数 opt 设置为 OS_OPT_TMR_ONE_SHOT,就是创建的单次定时器。创建一个单次定时器以后,我们一旦调用 OSTmrStart()函数定时器就会从创建时定义的 dly 开始倒计数,直到减为 0 调用回调函数。如图 9.1.1 所示。

图 9.1.1 展示了单次定时器在调用 OSTmrStart()函数后开始倒计数,将 dly 减为 0 后调用回调函数的过程,到这里定时器就停止运行,不再做任何事情了,我们可以调用 OSTmrStop()函数来删除这个运行完成的定时器。其实我们也可以重新调用 OSTmrStart()函数来开启一个已经运行完成的定时器,通过调用 OSTmrStart()函数来重新触发单次定时器,如果图 9.1.2 所示。在这里插入图片描述

周期定时器(无初始化延时):

使用 OSTmrCreate()函数创建定时器时把参数 opt 设置为 OS_OPT_TMR_PERIODIC,就是创建的周期定时器。 当定时器倒计数完成后,定时器就会调用回调函数,并且重置计数器开始下一轮的定时,就这样一直循环下去。如果使用 OSTmrCreate()函数创建定时器的时候,参数dly 为 0 的话,那么定时器在每个周期开始时计数器的初值就为 period,如图 9.1.3 所示。在这里插入图片描述
软件定时:CPU每执行一条指令时,是需要固定时间的,所以,通过执行空指令可以达到延时的效果,这样子做的代价是占用CPU时间,所以一般很少这么做。

不可编程硬件定时器:是由电路和硬件来完成定时功能的,一般采用基电路,外接定时部件(电阻和电容),通过改变电阻的阻值和电容的电容值来修改定时值,一量确定后件不能通过软件修改,这样子做的优点是不需要占用CPU时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值