TencentOS-tiny软件定时器的使用

1. 软件定时器

2. 提供的API

tos_timer_create

k_err_t tos_timer_create(k_timer_t *tmr,
                         k_tick_t delay,
                         k_tick_t period,
						 k_timer_callback_t callback,
                         void *cb_arg,
                         k_opt_t opt);
  • 功能描述

    创建一个定时器。

  • 参数解释

    IN/OUT 参数名 描述
    [in] tmr 定时器句柄
    [in] delay 定时器延迟多久后执行
    [in] period 周期性timer的周期
    [in] callback 定时器回调
    [in] cb_arg 定时器回调参数
    [in] opt 选项
  • 注意

    opt选项说明:

    1、TOS_OPT_TIMER_ONESHOT

    ​ 一次性定时器,创建定时器时传入此参数,表示该定时器是一次性的,只会执行一次。

    2、TOS_OPT_TIMER_PERIODIC

    ​ 周期性定时器,创建定时器时传入此参数,表示该定时器是周期性的,定时器到期后,会按period参数开启下一个周期。

  • 返回值

    K_ERR_NONE 定时器创建成功。

    K_ERR_TIMER_INVALID_PERIOD 非法的period参数。

    K_ERR_TIMER_INVALID_DELAY 非法的delay参数。

tos_timer_destroy

k_err_t tos_timer_destroy(k_timer_t *tmr);
  • 功能描述

    销毁一个定时器。

  • 参数解释

    IN/OUT 参数名 描述
    [in] tmr 定时器句柄
  • 返回值

    K_ERR_NONE 定时器启动成功。

    K_ERR_TIMER_INACTIVE 定时器并未被创建。

tos_timer_start

k_err_t tos_timer_start(k_timer_t *tmr);
  • 功能描述

    启动一个定时器。

  • 参数解释

    IN/OUT 参数名 描述
    [in] tmr 定时器句柄
  • 返回值

    K_ERR_NONE 定时器启动成功。

    K_ERR_TIMER_INACTIVE 定时器并未被创建。

    K_ERR_TIMER_INVALID_STATE 定时器状态非法。

tos_timer_stop

k_err_t tos_timer_stop(k_timer_t *tmr);
  • 功能描述

    停止一个定时器。

  • 参数解释

    IN/OUT 参数名 描述
    [in] tmr 定时器句柄
  • 返回值

    K_ERR_NONE 停止定时器成功。

    K_ERR_TIMER_INACTIVE 定时器并未被创建。

    K_ERR_TIMER_STOPPED 定时器已经处于停止状态。

tos_timer_delay_change

k_err_t tos_timer_delay_change(k_timer_t *tmr, k_tick_t delay);
  • 功能描述

    修改一个定时器的触发延时。

  • 参数解释

    IN/OUT 参数名 描述
    [in] tmr 定时器句柄
    [in] delay 修改后的触发延时参数
  • 返回值

    K_ERR_NONE 修改定时器触发延时成功。

    K_ERR_TIMER_INACTIVE 定时器并未被创建。

    K_ERR_TIMER_RUNNING 定时器正处于运行状态(不允许修改运行中的定时器的触发延时参数)。

    K_ERR_TIMER_INVALID_DELAY 非法的delay参数(试图将一个一次性定时器的delay参数修改为0)。

tos_timer_period_change

k_err_t tos_timer_period_change(k_timer_t *tmr, k_tick_t perio);
  • 功能描述

    修改一个定时器的触发周期。

  • 参数解释

    IN/OUT 参数名 描述
    [in] tmr 定时器句柄
    [in] period 修改后的触发周期参数
  • 返回值

    K_ERR_NONE 修改定时器触发周期成功。

    K_ERR_TIMER_INACTIVE 定时器并未被创建。

    K_ERR_TIMER_RUNNING 定时器正处于运行状态(不允许修改运行中的定时器的触发延时参数)。

    K_ERR_TIMER_INVALID_PERIOD 非法的period参数(试图将一个周期性定时器的period参数修改为0)。

3. 使用示例

设置一个3s触发一次的定时器,设置一个3s周期触发的定时器。

实验代码:

/**
 * @brief	TencentOS-tiny定时器测试
 * @author	Mculover666
 * @date	2020/6/5
*/
#include <tos_k.h>


k_timer_t timer1;
k_timer_t timer2;

void timer1_callback(void *args)
{
	printf("timer1 timeout!\r\n");
	
	return;
}
void timer2_callback(void *args)
{
	printf("timer2 timeout!\r\n");
	
	return;
}


void application_entry(void *arg)
{

	k_err_t ret;
	
	//创建定时器
	ret = tos_timer_create(&timer1,
					 3000,
					 3000,
					 timer1_callback,
					 NULL,
					 TOS_OPT_TIMER_PERIODIC);
	if(ret != K_ERR_NONE)
	{
		printf("timer 1 create fail, err = %d.\r\n", ret);
	}
	
	
	ret = tos_timer_create(&timer2,
					 3000,
					 0,
					 timer2_callback,
					 NULL,
					 TOS_OPT_TIMER_ONESHOT);
	if(ret != K_ERR_NONE)
	{
		printf("timer 2 create fail, err = %d.\r\n", ret);
	}
	
	//启动定时器
	tos_timer_start(&timer1);
	tos_timer_start(&timer2);
	
    while (1) {
        //printf("This is a demo task,please use your task entry!\r\n");
        tos_task_delay(1000);
    }
}

实验结果:

猜你喜欢

转载自blog.csdn.net/Mculover666/article/details/106565310