@@ -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);
692689rt_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,15 @@ 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 ;
710+ rt_tick_t target_tick ;
711+ target_tick = * tick + inc_tick ;
712+ left_tick = target_tick - rt_tick_get ();
715713
716- * tick += inc_tick ;
717- left_tick = * tick - cur_tick ;
714+ if ( left_tick > target_tick )
715+ left_tick = RT_TICK_MAX - left_tick + 1 ;
718716
719717 /* suspend thread */
720718 rt_thread_suspend_with_flag (thread , RT_UNINTERRUPTIBLE );
@@ -735,7 +733,7 @@ rt_err_t rt_thread_delay_until(rt_tick_t *tick, rt_tick_t inc_tick)
735733 }
736734 else
737735 {
738- * tick = cur_tick ;
736+ * tick = rt_tick_get () ;
739737 rt_exit_critical_safe (critical_level );
740738 }
741739
0 commit comments