一 軟件定時器相關函數
初始化定時器管理系統 | rt_system_timer_init |
rt_system_timer_thread_init | |
創建定時器 |
rt_timer_t rt_timer_create(const char* name, //定時器的名稱 void* parameter,//定時器超時函數的入口參數 rt_uint8_t flag);//定時器創建時的參數 |
刪除定時器 | rt_err_t rt_timer_delete(rt_timer_t timer); |
初始化靜態定時器 |
void rt_timer_init(rt_timer_t timer,//定時器句柄 void (*timeout)(void* parameter), //定時器超時函數指針 void* parameter,//定時器超時函數的入口參數 rt_uint8_t flag);//定時器創建時的參數 |
脫離靜態定時器 | rt_err_t rt_timer_detach(rt_timer_t timer); |
啓動定時器 | rt_err_t rt_timer_start(rt_timer_t timer); |
停止定時器 | rt_err_t rt_timer_stop(rt_timer_t timer); |
控制定時器 | rt_err_t rt_timer_control(rt_timer_t timer, rt_uint8_t cmd, void* arg); |
二 使用定時器
關於軟件定時器有以下幾點需要注意:
- 軟件定時器線程的優先級默認爲 RT_TIMER_THREAD_PRIO,默認爲 4
- 軟件定時器的精度由系統節拍(RT_TICK_PER_SECOND)決定.
- 可以在rtconfig.h中配置是否使用軟件定時器,以及定時器優先級,棧大小,節拍數
#include <rtthread.h>
/* 定時器的控制塊 */
static rt_timer_t timer1;
/* 定時器1超時函數 */
static void timeout1(void* parameter)
{
}
/* 創建定時器1 */
timer1 = rt_timer_create("timer1", /* 定時器名字是 timer1 */
timeout1, /* 超時時回調的處理函數 */
RT_NULL, /* 超時函數的入口參數 */
10, /* 定時長度,以OS Tick爲單位,即10個OS Tick */
RT_TIMER_FLAG_PERIODIC); /* 週期性定時器 */
/* 啓動定時器 */
if (timer1 != RT_NULL) rt_timer_start(timer1);