Rtthread學習筆記(十四)RT-Thread Studio使用軟件定時器

一 、軟件定時器

軟件定時器是由操作系統提供的一類系統接口,它構建在硬件定時器基礎之上,使系統能夠提供不受數目限制的定時器服務。

RT-Thread 操作系統提供軟件實現的定時器,以時鐘節拍(OS Tick)的時間長度爲單位,即定時數值必須是 OS Tick 的整數倍,例如一個 OS Tick 是 10ms,那麼上層軟件定時器只能是 10ms,20ms,100ms 等,而不能定時爲 15ms。RT-Thread 的定時器也基於系統的節拍,提供了基於節拍整數倍的定時能力。

1、查看系統的時鐘節拍OS Tick

無特殊需求,使用默認1000HZ,即1ms即可。
在這裏插入圖片描述

2、複製例程使用

更多函數接口查看RT官方資料RT軟件定時器
在這裏插入圖片描述
這個例程會創建兩個動態定時器,一個是單次定時,一個是週期性定時並讓週期定時器運行一段時間後停止運行,如下所示:

/* 定時器的控制塊 */
static rt_timer_t timer1;
static rt_timer_t timer2;
static int cnt = 0;

/* 定時器 1 超時函數 */
static void timeout1(void *parameter)
{
    rt_kprintf("periodic timer is timeout %d\n", cnt);

    /* 運行第 10 次,停止週期定時器 */
    if (cnt++>= 9)
    {
        rt_timer_stop(timer1);
        rt_kprintf("periodic timer was stopped! \n");
    }
}

/* 定時器 2 超時函數 */
static void timeout2(void *parameter)
{
    rt_kprintf("one shot timer is timeout\n");
}

int timer_sample(void)
{
    /* 創建定時器 1  週期定時器 */
    timer1 = rt_timer_create("timer1", timeout1,
                             RT_NULL, 10,
                             RT_TIMER_FLAG_PERIODIC);

    /* 啓動定時器 1 */
    if (timer1 != RT_NULL) rt_timer_start(timer1);

    /* 創建定時器 2 單次定時器 */
    timer2 = rt_timer_create("timer2", timeout2,
                             RT_NULL,  30,
                             RT_TIMER_FLAG_ONE_SHOT);

    /* 啓動定時器 2 */
    if (timer2 != RT_NULL) rt_timer_start(timer2);
    return 0;
}

在這裏插入圖片描述

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