定時器可以通過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