RT-thread学习笔记之线程切换

年初的时候学习的RT-thread,时间久了有些东西都又忘了,这里记录一下自己的学习笔记方便回顾,请参考RT-thread的官方编程指南,里面讲解的其实很详细。

  1. RT-thread在Cortex-M内核中是通过人为触发PendSV异常中断进行线程切换的,若在中断中触发PendSV异常,那么PendSV响应将在所有中断结束后进行,其实很多芯片内核都有PendSV异常中断用于操作系统线程切换;

  2. Cortex-M内核有两个堆栈指针,Rt-thread做上下文切换的时候操作的是PSP
  3. 线程之间的上下文切换:

    RT-thread学习笔记之线程切换_第1张图片

     

  4. 在中断里进行上下文切换:

    RT-thread学习笔记之线程切换_第2张图片

     

  5. rt_thread_switch_interrupt_flag表示需要在中断里进行切换的标志,会在pendSV处理函数中清除,在cortex-M3内核的上下文切换函数rt_hw_context_switch()/rt_hw_context_switch_interrupt()中,做的如下判断可能出于两种情况考虑:(1)防止调用rt_hw_context_switch_to()后突然来了个中断抢在PendSV异常处理前,且这个中断调用了rt_hw_context_switch()/rt_hw_context_switch_interrupt(),因为此时没有from线程,所以并不需要保存参数from;(2)防止中断嵌套切换,当有中断调用切换函数时突然又来了个中断调用切换函数,此时忽略嵌套中断里的from信息。(这里逻辑复杂,我觉得还是UCOSIII做的好)

RT-thread学习笔记之线程切换_第3张图片

 

你可能感兴趣的:(RT-thread,RT-thread,线程切换)