diff options
| author | bernard <[email protected]> | 2017-10-15 22:31:53 +0800 |
|---|---|---|
| committer | bernard <[email protected]> | 2017-10-15 22:31:53 +0800 |
| commit | b27c7e482648535760e012cd6f1afef1d800e2d2 (patch) | |
| tree | ad040fd4e7579e67ba6ee2edae468b63f2099a0e /src/scheduler.c | |
| parent | cd215b25455bf06dfeb8885fe4d8f5b30174a8c3 (diff) | |
[Kernel] Add signal implementation.
1. Add signal implementation;
2. Change the 'rt_uint8_t' of cmd to 'int';
Diffstat (limited to 'src/scheduler.c')
| -rw-r--r-- | src/scheduler.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/scheduler.c b/src/scheduler.c index e3e200efc7..6fe5055053 100644 --- a/src/scheduler.c +++ b/src/scheduler.c @@ -42,7 +42,6 @@ static rt_int16_t rt_scheduler_lock_nest; extern volatile rt_uint8_t rt_interrupt_nest; -extern rt_ubase_t __rt_ffs(rt_ubase_t value); rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX]; struct rt_thread *rt_current_thread; @@ -241,8 +240,18 @@ void rt_schedule(void) if (rt_interrupt_nest == 0) { + extern void rt_thread_handle_sig(rt_bool_t clean_state); + rt_hw_context_switch((rt_uint32_t)&from_thread->sp, (rt_uint32_t)&to_thread->sp); + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + +#ifdef RT_USING_SIGNALS + /* check signal status */ + rt_thread_handle_sig(RT_TRUE); +#endif } else { @@ -250,12 +259,16 @@ void rt_schedule(void) rt_hw_context_switch_interrupt((rt_uint32_t)&from_thread->sp, (rt_uint32_t)&to_thread->sp); + /* enable interrupt */ + rt_hw_interrupt_enable(level); } } + else + { + /* enable interrupt */ + rt_hw_interrupt_enable(level); + } } - - /* enable interrupt */ - rt_hw_interrupt_enable(level); } /* |
