嵌入式技术william hill官网
直播中

贾埃罗

7年用户 1709经验值
私信 关注
[问答]

求助,rt_schedule()中线程切换与开中断时机的先后原因?

系统调度函数 rt_schedule()中:
关中断后,获取就绪的最高优先级对应的线程,然后进行线程切换判断
(1)
如果目标线程不是当前线程,则要进行线程切换,具体操作是:
先切换上下文:
rt_hw_context_switch((rt_uint32_t)&from_thread->sp,(rt_uint32_t)&to_thread->sp);
再开中断:
rt_hw_interrupt_enable(level);
这里好理解,先切换上下文(线程切换),以免被中断打断,然后开中断;
(2)
如果目标线程是当前线程,则先开中断:
rt_hw_interrupt_enable(level);
再切换回到原线程继续执行
rt_hw_context_switch((rt_uint32_t)&from_thread->sp, (rt_uint32_t)&to_thread->sp);
可这里同样是线程切换(虽然是回到原线程,没有上下文的变更,但本质上讲,也是一次上下文切换,只不过是回到原来的堆栈环境开始执行),为什么要先开中断,再调用上下文切换rt_hw_context_switch()函数?回到原来线程的过程不用担心被打断吗?

回帖(2)

郑成枝

2022-5-16 15:15:50

举报

郑成枝

2022-5-16 15:17:08

举报

更多回帖

发帖
×
20
完善资料,
赚取积分