lgnq 发表于 2010-4-16 23:40:54

嵌套中断中,切换上下文的疑惑

ucosii是在中断嵌套层数==0的时候,才进行上下文切换,否则直接返回中断服务程序。

RT-thread好像不管中断嵌套多少层,有更高优先级的线程就绪,就切换上下文,是这样的吗?

zchong 发表于 2010-4-17 09:26:33

不是酱紫的,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);
}

lgnq 发表于 2010-4-17 11:47:37

回复【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);
}
-----------------------------------------------------------------------

这段只是区分了中断里切换上下文,还是在非中断中切换上下文

但是如果中断有嵌套的话,不管是嵌套多少层,都要进行切换上下文

zchong 发表于 2010-4-17 12:50:05

rt_hw_context_switch_interrupt这个函数并没有真正的切换吧

ffxz 发表于 2010-4-17 13:18:07

回复【3楼】zchong
rt_hw_context_switch_interrupt这个函数并没有真正的切换吧
-----------------------------------------------------------------------

是的,rt_hw_context_switch_interrupt仅记录需要切换的线程,而如果其中因为中断嵌套发送了第二次或第N次切换,仅仅是把预切换到的线程更新。

当所有中断退出后,将开始真正的切换。
页: [1]
查看完整版本: 嵌套中断中,切换上下文的疑惑