年初的時候學習的RT-thread,時間久了有些東西都又忘了,這裏記錄一下自己的學習筆記方便回顧,請參考RT-thread的官方編程指南,裏面講解的其實很詳細。
-
RT-thread在Cortex-M內核中是通過人爲觸發PendSV異常中斷進行線程切換的,若在中斷中觸發PendSV異常,那麼PendSV響應將在所有中斷結束後進行,其實很多芯片內核都有PendSV異常中斷用於操作系統線程切換;
- Cortex-M內核有兩個堆棧指針,Rt-thread做上下文切換的時候操作的是PSP
- 線程之間的上下文切換:
-
在中斷裏進行上下文切換:
-
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做的好)