[RTT例程練習] 4.4 定時器控制

定時器可以通過rt_timer_control(),來改變定時器的某些特性,比如定時時間。

這裏,一開始定時週期是100,並且在程序中使用

rt_tick_get()-tick
來確認定時週期是否如預設那樣。當8次之後,使用rt_timer_control(),將定時週期改爲3000。實際效果通過打印的tick信息和直觀感受都可以驗證。

程序:

#include <rtthread.h>

static rt_timer_t timer1;
//static rt_timer_t timer2;
static rt_uint8_t count;
static rt_tick_t tick;

static void timeout1(void* parameter)
{
    rt_tick_t timeout = 3000;
    rt_kprintf("periodic timer is timeout\n");
    
    rt_kprintf("the time set is %d\n", (rt_tick_get()-tick));
    tick = rt_tick_get();
    count ++;
   
    if (count >= 8)
    {
        rt_timer_control(timer1, RT_TIMER_CTRL_SET_ONESHOT, (void *)&timeout);
    
        rt_timer_control(timer1, RT_TIMER_CTRL_SET_TIME, (void *)&timeout);
        count = 0;
    }
}

int rt_application_init()
{
    timer1 = rt_timer_create("timer1",
        timeout1,
        RT_NULL,
        100,
        RT_TIMER_FLAG_PERIODIC);
    
    if (timer1 != RT_NULL)
        rt_timer_start(timer1);
  
    return 0;
}


結果:

periodic timer is timeout
the time set is 100
periodic timer is timeout
the time set is 100
periodic timer is timeout
the time set is 100
periodic timer is timeout
the time set is 100
periodic timer is timeout
the time set is 100
periodic timer is timeout
the time set is 100
periodic timer is timeout
the time set is 100
periodic timer is timeout
the time set is 100
periodic timer is timeout
the time set is 3000
periodic timer is timeout
the time set is 3000
periodic timer is timeout
the time set is 3000
periodic timer is timeout
the time set is 3000


發佈了49 篇原創文章 · 獲贊 10 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章