diff --git a/components/drivers/ktime/src/hrtimer.c b/components/drivers/ktime/src/hrtimer.c index 8b774676df..728770ad46 100644 --- a/components/drivers/ktime/src/hrtimer.c +++ b/components/drivers/ktime/src/hrtimer.c @@ -146,20 +146,26 @@ static void _set_next_timeout_locked(void) { rt_ktime_hrtimer_t timer; rt_ubase_t next_timeout_hrtimer_cnt; + rt_bool_t find_next; - if ((timer = _first_hrtimer()) != RT_NULL) + do { - next_timeout_hrtimer_cnt = _cnt_convert(timer->timeout_cnt); - if (next_timeout_hrtimer_cnt > 0) + find_next = RT_FALSE; + if ((timer = _first_hrtimer()) != RT_NULL) { - rt_ktime_hrtimer_settimeout(next_timeout_hrtimer_cnt); - } - else - { - _hrtimer_process_locked(); - _set_next_timeout_locked(); + next_timeout_hrtimer_cnt = _cnt_convert(timer->timeout_cnt); + if (next_timeout_hrtimer_cnt > 0) + { + rt_ktime_hrtimer_settimeout(next_timeout_hrtimer_cnt); + } + else + { + _hrtimer_process_locked(); + find_next = RT_TRUE; + } } } + while (find_next); } void rt_ktime_hrtimer_process(void)