RT-thread學習筆記之線程切換

年初的時候學習的RT-thread,時間久了有些東西都又忘了,這裏記錄一下自己的學習筆記方便回顧,請參考RT-thread的官方編程指南,裏面講解的其實很詳細。

  1. RT-thread在Cortex-M內核中是通過人爲觸發PendSV異常中斷進行線程切換的,若在中斷中觸發PendSV異常,那麼PendSV響應將在所有中斷結束後進行,其實很多芯片內核都有PendSV異常中斷用於操作系統線程切換;

  2. Cortex-M內核有兩個堆棧指針,Rt-thread做上下文切換的時候操作的是PSP
  3. 線程之間的上下文切換:

     

  4. 在中斷裏進行上下文切換:

     

  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做的好)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章