将yield状态置于tcb的stat位域中
This commit is contained in:
parent
9a38bba168
commit
e03ac83ad3
|
@ -491,7 +491,10 @@ typedef siginfo_t rt_siginfo_t;
|
||||||
#define RT_THREAD_RUNNING 0x03 /**< Running status */
|
#define RT_THREAD_RUNNING 0x03 /**< Running status */
|
||||||
#define RT_THREAD_BLOCK RT_THREAD_SUSPEND /**< Blocked status */
|
#define RT_THREAD_BLOCK RT_THREAD_SUSPEND /**< Blocked status */
|
||||||
#define RT_THREAD_CLOSE 0x04 /**< Closed status */
|
#define RT_THREAD_CLOSE 0x04 /**< Closed status */
|
||||||
#define RT_THREAD_STAT_MASK 0x0f
|
#define RT_THREAD_STAT_MASK 0x07
|
||||||
|
|
||||||
|
#define RT_THREAD_STAT_YIELD 0x08 /**< indicate whether remaining_tick has been reloaded since last schedule */
|
||||||
|
#define RT_THREAD_STAT_YIELD_MASK RT_THREAD_STAT_YIELD
|
||||||
|
|
||||||
#define RT_THREAD_STAT_SIGNAL 0x10 /**< task hold signals */
|
#define RT_THREAD_STAT_SIGNAL 0x10 /**< task hold signals */
|
||||||
#define RT_THREAD_STAT_SIGNAL_READY (RT_THREAD_STAT_SIGNAL | RT_THREAD_READY)
|
#define RT_THREAD_STAT_SIGNAL_READY (RT_THREAD_STAT_SIGNAL | RT_THREAD_READY)
|
||||||
|
@ -608,7 +611,6 @@ struct rt_thread
|
||||||
|
|
||||||
rt_ubase_t init_tick; /**< thread's initialized tick */
|
rt_ubase_t init_tick; /**< thread's initialized tick */
|
||||||
rt_ubase_t remaining_tick; /**< remaining tick */
|
rt_ubase_t remaining_tick; /**< remaining tick */
|
||||||
rt_ubase_t can_yield; /**< indicate whether remaining_tick has been reloaded since last schedule */
|
|
||||||
|
|
||||||
struct rt_timer thread_timer; /**< built-in thread timer */
|
struct rt_timer thread_timer; /**< built-in thread timer */
|
||||||
|
|
||||||
|
|
|
@ -89,7 +89,7 @@ void rt_tick_increase(void)
|
||||||
/* change to initialized tick */
|
/* change to initialized tick */
|
||||||
thread->remaining_tick = thread->init_tick;
|
thread->remaining_tick = thread->init_tick;
|
||||||
|
|
||||||
thread->can_yield = RT_TRUE;
|
thread->stat |= RT_THREAD_STAT_YIELD;
|
||||||
|
|
||||||
/* yield */
|
/* yield */
|
||||||
rt_thread_yield();
|
rt_thread_yield();
|
||||||
|
|
|
@ -344,13 +344,13 @@ void rt_schedule(void)
|
||||||
{
|
{
|
||||||
to_thread = current_thread;
|
to_thread = current_thread;
|
||||||
}
|
}
|
||||||
else if (current_thread->current_priority == highest_ready_priority && current_thread->can_yield == RT_FALSE)
|
else if (current_thread->current_priority == highest_ready_priority && (current_thread->stat & RT_THREAD_STAT_YIELD_MASK) == 0)
|
||||||
{
|
{
|
||||||
to_thread = current_thread;
|
to_thread = current_thread;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
current_thread->can_yield = RT_FALSE;
|
current_thread->stat &= ~RT_THREAD_STAT_YIELD_MASK;
|
||||||
rt_schedule_insert_thread(current_thread);
|
rt_schedule_insert_thread(current_thread);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -440,13 +440,13 @@ void rt_schedule(void)
|
||||||
{
|
{
|
||||||
to_thread = rt_current_thread;
|
to_thread = rt_current_thread;
|
||||||
}
|
}
|
||||||
else if (rt_current_thread->current_priority == highest_ready_priority && rt_current_thread->can_yield == RT_FALSE)
|
else if (rt_current_thread->current_priority == highest_ready_priority && (rt_current_thread->stat & RT_THREAD_STAT_YIELD_MASK) == 0)
|
||||||
{
|
{
|
||||||
to_thread = rt_current_thread;
|
to_thread = rt_current_thread;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rt_current_thread->can_yield = RT_FALSE;
|
rt_current_thread->stat &= ~RT_THREAD_STAT_YIELD_MASK;
|
||||||
need_insert_from_thread = 1;
|
need_insert_from_thread = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -588,13 +588,13 @@ void rt_scheduler_do_irq_switch(void *context)
|
||||||
{
|
{
|
||||||
to_thread = current_thread;
|
to_thread = current_thread;
|
||||||
}
|
}
|
||||||
else if (current_thread->current_priority == highest_ready_priority && current_thread->can_yield == RT_FALSE)
|
else if (current_thread->current_priority == highest_ready_priority && (current_thread->stat & RT_THREAD_STAT_YIELD_MASK) == 0)
|
||||||
{
|
{
|
||||||
to_thread = current_thread;
|
to_thread = current_thread;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
current_thread->can_yield = RT_FALSE;
|
current_thread->stat &= ~RT_THREAD_STAT_YIELD_MASK;
|
||||||
rt_schedule_insert_thread(current_thread);
|
rt_schedule_insert_thread(current_thread);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -159,7 +159,6 @@ static rt_err_t _rt_thread_init(struct rt_thread *thread,
|
||||||
/* tick init */
|
/* tick init */
|
||||||
thread->init_tick = tick;
|
thread->init_tick = tick;
|
||||||
thread->remaining_tick = tick;
|
thread->remaining_tick = tick;
|
||||||
thread->can_yield = RT_FALSE;
|
|
||||||
|
|
||||||
/* error and flags */
|
/* error and flags */
|
||||||
thread->error = RT_EOK;
|
thread->error = RT_EOK;
|
||||||
|
|
Loading…
Reference in New Issue