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

石玉兰

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

rt-thread上下文切换函数的意义在哪?

Cortex-M3内核上下文切换函数rt_hw_context_switch()/ rt_hw_context_switch_interrupt()中有个判断rt_thread_switch_interrupt_flag的地方,不知道意义在哪?
2.jpg

回帖(4)

石玉兰

2023-3-10 11:28:52
我的猜想是防止调用第一个切换线程函数rt_hw_context_switch_to()后突然来了个中断抢在PendSV异常处理前,且这个中断调用了rt_hw_context_switch()/rt_hw_context_switch_interrupt(),因为此时没有from线程,所以并不需要保存参数from。
举报

尚文清

2023-3-10 11:29:02
中断到中断的切换
举报

杨平

2023-3-10 11:29:09
我猜应该是这样子的,
发生中断。中断处理函数中遇到线程切换请求(A —> B)。调用 rt_hw_context_switch()/ rt_hw_context_switch_interrupt() 函数悬起 PENDSV ,准备进行线程切换。注意,当前点还没有真正执行切换。from_thread=A,to_thread=B。

继续处理中断,又遇到线程切换请求 (B —> C)。此时要注意:由于之前有过一次线程切换的请求,但是还未执行。所以 from_thread 没有改变,仅仅是 to_thread 线程改变了。所以仅需要更改 to_thread。得到 from_thread=A,to_thread=C

出中断后,执行 PENDSV。将线程从 A 切断到 C。
举报

石玉兰

2023-3-10 11:29:23
确实应该是这样,还有我注意到一点,之前我以为上下文切换函数也会被嵌套中断打断,其实封装了这个函数的线程切换函数都进行了屏蔽中断操作,也使这段逻辑不会太复杂。
举报

更多回帖

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