定時器可以通過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 timeoutthe time set is 100periodic timer is timeoutthe time set is 100periodic timer is timeoutthe time set is 100periodic timer is timeoutthe time set is 100periodic timer is timeoutthe time set is 100periodic timer is timeoutthe time set is 100periodic timer is timeoutthe time set is 100periodic timer is timeoutthe time set is 100periodic timer is timeoutthe time set is 3000periodic timer is timeoutthe time set is 3000periodic timer is timeoutthe time set is 3000periodic timer is timeoutthe time set is 3000