嵌套中断中,切换上下文的疑惑
ucosii是在中断嵌套层数==0的时候,才进行上下文切换,否则直接返回中断服务程序。RT-thread好像不管中断嵌套多少层,有更高优先级的线程就绪,就切换上下文,是这样的吗? 不是酱紫的,void rt_schedule()函数中:
if (rt_interrupt_nest == 0)
{
rt_hw_context_switch((rt_uint32_t)&from_thread->sp, (rt_uint32_t)&to_thread->sp);
}
else
{
rt_hw_context_switch_interrupt((rt_uint32_t)&from_thread->sp,
(rt_uint32_t)&to_thread->sp);
} 回复【1楼】zchong
不是酱紫的,void rt_schedule()函数中:
if (rt_interrupt_nest == 0)
{
rt_hw_context_switch((rt_uint32_t)&from_thread->sp, (rt_uint32_t)&to_thread->sp);
}
else
{
rt_hw_context_switch_interrupt((rt_uint32_t)&from_thread->sp,
(rt_uint32_t)&to_thread->sp);
}
-----------------------------------------------------------------------
这段只是区分了中断里切换上下文,还是在非中断中切换上下文
但是如果中断有嵌套的话,不管是嵌套多少层,都要进行切换上下文 rt_hw_context_switch_interrupt这个函数并没有真正的切换吧 回复【3楼】zchong
rt_hw_context_switch_interrupt这个函数并没有真正的切换吧
-----------------------------------------------------------------------
是的,rt_hw_context_switch_interrupt仅记录需要切换的线程,而如果其中因为中断嵌套发送了第二次或第N次切换,仅仅是把预切换到的线程更新。
当所有中断退出后,将开始真正的切换。
页:
[1]