[components][ktime]support period ktime timeout and multiple ktimer_hrtimer (#8972)

* support period time

* enable multiple ktimer

* mv set delay_cnt to hrtimer_start

* add ktime debug info

* change current_irq_begin to local var

* fix bug: setting current timer and setting timeout in driver aren't atomicly

* create->init

* refactoring ktime
This commit is contained in:
zms123456
2024-06-23 22:08:54 +08:00
committed by GitHub
parent 5c1e5d2fca
commit 22b5e5fd7b
5 changed files with 132 additions and 139 deletions

View File

@@ -881,8 +881,7 @@ static void rtthread_timer_wrapper(void *timerobj)
rt_ktime_cputimer_getres();
if (timer->reload)
{
rt_ktime_hrtimer_control(&timer->hrtimer, RT_TIMER_CTRL_SET_TIME, &(timer->reload));
rt_ktime_hrtimer_start(&timer->hrtimer);
rt_ktime_hrtimer_start(&timer->hrtimer, timer->reload);
}
#ifdef RT_USING_SMART
/* this field is named as tid in musl */
@@ -1003,7 +1002,7 @@ int timer_create(clockid_t clockid, struct sigevent *evp, timer_t *timerid)
timer->status = NOT_ACTIVE;
timer->clockid = clockid;
rt_ktime_hrtimer_init(&timer->hrtimer, timername, 0, RT_TIMER_FLAG_ONE_SHOT | RT_TIMER_FLAG_HARD_TIMER,
rt_ktime_hrtimer_init(&timer->hrtimer, timername, RT_TIMER_FLAG_ONE_SHOT | RT_TIMER_FLAG_HARD_TIMER,
rtthread_timer_wrapper, timer);
_timerid = resource_id_get(&id_timer);
@@ -1226,8 +1225,7 @@ int timer_settime(timer_t timerid, int flags, const struct itimerspec *value,
else
rt_ktime_hrtimer_control(&timer->hrtimer, RT_TIMER_CTRL_SET_PERIODIC, RT_NULL);
rt_ktime_hrtimer_control(&timer->hrtimer, RT_TIMER_CTRL_SET_TIME, &(timer->reload));
rt_ktime_hrtimer_start(&timer->hrtimer);
rt_ktime_hrtimer_start(&timer->hrtimer, timer->reload);
return 0;
}