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);
    }
}

實驗結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章