diff --git a/src/timer.c b/src/timer.c index 558cbfac35c43d0dc5cb3adb17b5a06c0a4a81e1..f35ce8e96483b49841140ed4b6e0dcae983fdf1a 100644 --- a/src/timer.c +++ b/src/timer.c @@ -270,6 +270,9 @@ rt_err_t rt_timer_stop(rt_timer_t timer) /* disable interrupt */ level = rt_hw_interrupt_disable(); + /* change stat */ + timer->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; + /* remove it from timer list */ rt_list_remove(&(timer->list)); @@ -361,14 +364,18 @@ void rt_timer_check() rt_kprintf("current tick: %d\n", current_tick); #endif - /* change timer state */ - t->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; - - if (t->parent.flag & RT_TIMER_FLAG_PERIODIC) + if ((t->parent.flag & RT_TIMER_FLAG_PERIODIC) && + (t->parent.flag & RT_TIMER_FLAG_ACTIVATED)) { /* start it */ + t->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; rt_timer_start(t); } + else + { + /* stop timer */ + t->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; + } } else break; }