Skip to content

Commit 98ddabd

Browse files
committed
移除冗余 在rt_enter_critical 范围内调用rt_schedule 无效,退出范围自动调用rt_schedule 。修复时钟溢出
1 parent 21e926e commit 98ddabd

1 file changed

Lines changed: 3 additions & 9 deletions

File tree

src/thread.c

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -647,9 +647,6 @@ static rt_err_t _thread_sleep(rt_tick_t tick)
647647

648648
thread->error = -RT_EINTR;
649649

650-
/* notify a pending rescheduling */
651-
rt_schedule();
652-
653650
/* exit critical and do a rescheduling */
654651
rt_exit_critical_safe(critical_level);
655652

@@ -692,7 +689,6 @@ RTM_EXPORT(rt_thread_delay);
692689
rt_err_t rt_thread_delay_until(rt_tick_t *tick, rt_tick_t inc_tick)
693690
{
694691
struct rt_thread *thread;
695-
rt_tick_t cur_tick;
696692
rt_base_t critical_level;
697693

698694
RT_ASSERT(tick != RT_NULL);
@@ -708,13 +704,11 @@ rt_err_t rt_thread_delay_until(rt_tick_t *tick, rt_tick_t inc_tick)
708704
/* disable interrupt */
709705
critical_level = rt_enter_critical();
710706

711-
cur_tick = rt_tick_get();
712-
if (cur_tick - *tick < inc_tick)
707+
if (rt_tick_get_delta(*tick) < inc_tick)
713708
{
714709
rt_tick_t left_tick;
715710

716-
*tick += inc_tick;
717-
left_tick = *tick - cur_tick;
711+
left_tick = rt_tick_get_left(*tick + inc_tick);
718712

719713
/* suspend thread */
720714
rt_thread_suspend_with_flag(thread, RT_UNINTERRUPTIBLE);
@@ -735,7 +729,7 @@ rt_err_t rt_thread_delay_until(rt_tick_t *tick, rt_tick_t inc_tick)
735729
}
736730
else
737731
{
738-
*tick = cur_tick;
732+
*tick = rt_tick_get();
739733
rt_exit_critical_safe(critical_level);
740734
}
741735

0 commit comments

Comments
 (0)