Skip to content

Commit

Permalink
🎈 perf(ktime): perf hrtimer, del wrong function
Browse files Browse the repository at this point in the history
  • Loading branch information
xqyjlj committed Jul 28, 2023
1 parent 307e9e5 commit d1010e2
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 27 deletions.
1 change: 0 additions & 1 deletion components/ktime/inc/ktime.h
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,6 @@ void rt_ktime_hrtimer_init(rt_ktime_hrtimer_t timer,
rt_uint8_t flag,
void (*timeout)(void *parameter),
void *parameter);
rt_err_t rt_ktime_hrtimer_delete(rt_ktime_hrtimer_t timer);
rt_err_t rt_ktime_hrtimer_start(rt_ktime_hrtimer_t timer);
rt_err_t rt_ktime_hrtimer_stop(rt_ktime_hrtimer_t timer);
rt_err_t rt_ktime_hrtimer_control(rt_ktime_hrtimer_t timer, int cmd, void *arg);
Expand Down
44 changes: 18 additions & 26 deletions components/ktime/src/hrtimer.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,9 @@ static void _hrtimer_timeout(void *parameter)
rt_weak rt_err_t rt_ktime_hrtimer_settimeout(unsigned long cnt, void (*timeout)(void *param), void *param)
{
static rt_timer_t timer = RT_NULL;
rt_base_t level;

level = rt_spin_lock_irqsave(&_spinlock);
_outcb = timeout;
if (cnt == 0)
{
Expand All @@ -61,7 +63,7 @@ rt_weak rt_err_t rt_ktime_hrtimer_settimeout(unsigned long cnt, void (*timeout)(
rt_timer_stop(timer);
}
}

rt_spin_unlock_irqrestore(&_spinlock, level);
if (_outcb)
_outcb(param);

Expand All @@ -84,6 +86,7 @@ rt_weak rt_err_t rt_ktime_hrtimer_settimeout(unsigned long cnt, void (*timeout)(
rt_timer_stop(timer);
}
rt_timer_start(timer);
rt_spin_unlock_irqrestore(&_spinlock, level);
return RT_EOK;
}

Expand Down Expand Up @@ -197,24 +200,6 @@ void rt_ktime_hrtimer_init(rt_ktime_hrtimer_t timer,
rt_sem_init(&(timer->sem), "hrtimer", 0, RT_IPC_FLAG_PRIO);
}

rt_err_t rt_ktime_hrtimer_delete(rt_ktime_hrtimer_t timer)
{
rt_base_t level;

/* parameter check */
RT_ASSERT(timer != RT_NULL);

level = rt_spin_lock_irqsave(&_spinlock);
_nowtimer = RT_NULL;
rt_list_remove(&timer->row);
timer->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; /* stop timer */
rt_spin_unlock_irqrestore(&_spinlock, level);

_set_next_timeout();

return RT_EOK;
}

rt_err_t rt_ktime_hrtimer_start(rt_ktime_hrtimer_t timer)
{
rt_list_t *timer_list;
Expand Down Expand Up @@ -350,15 +335,22 @@ rt_err_t rt_ktime_hrtimer_detach(rt_ktime_hrtimer_t timer)
/* parameter check */
RT_ASSERT(timer != RT_NULL);

level = rt_spin_lock_irqsave(&_spinlock);
_nowtimer = RT_NULL;
rt_list_remove(&timer->row);
level = rt_spin_lock_irqsave(&_spinlock);

/* stop timer */
timer->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED;
rt_spin_unlock_irqrestore(&_spinlock, level);

_set_next_timeout();

/* when interrupted */
if (rt_get_errno() == -RT_EINTR)
{
_nowtimer = RT_NULL;
rt_list_remove(&timer->row);
rt_spin_unlock_irqrestore(&_spinlock, level);
_set_next_timeout();
}
else
{
rt_spin_unlock_irqrestore(&_spinlock, level);
}
rt_sem_detach(&(timer->sem));

return RT_EOK;
Expand Down

0 comments on commit d1010e2

Please sign in to comment.