1. 程式人生 > >RTT執行緒排程學習筆記

RTT執行緒排程學習筆記

執行緒排程與管理

執行緒執行狀態

  • 執行緒通過呼叫函式rt_thread_create/init進入初始狀態(RT_THREAD_INIT);
  • 再通過呼叫函式rt_thread_startup進入到就緒狀態(RT_THREAD_READY);
  • 當處於執行狀態的執行緒呼叫rt_thread_delay,rt_sem_take,rt_mb_recv等函式或獲取不到資源時,將進入掛起狀態(RT_THREAD_SUSPEND);
  • 處於掛起狀態的執行緒,如果等待超時依然未能獲取資源或由於其他執行緒釋放了資源,那麼他將重新變為就緒狀態;
  • 掛起狀態的執行緒,如果呼叫rt_thread_delete/detach將更改為關閉狀態(RT_THREAD_CLOSE);
  • 而執行狀態下的執行緒,結束會線上程最後部分執行rt_thread_exit函式而更改為關閉狀態(RT_THREAD_CLOSE)。

注意事項

idle執行緒

  • 空閒執行緒中不能死迴圈,需要留出時間用於系統處理殭屍執行緒的系統資源回收
  • 該執行緒不能掛起,保證至少有一個執行緒能夠執行 中斷服務例程
  • 執行在非執行緒環境下(一般為特權模式),在這個上下文環境中不能使用掛起當前執行緒的操作,因為當前執行緒不存在,執行相關的操作會有類似: FUNCTION[abd_func]shall not used in ISR (abc_func即你不應在中斷服務函式中呼叫的函式)
  • 中斷服務函式需要精簡,因為中斷服務是一種高於任何執行緒的存在 普通執行緒
    做為優先順序明確的實時作業系統,如果一個執行緒的程式執行了死迴圈操作那麼比他優先順序低的執行緒將不能夠得到執行包括idle執行緒。這是在實時作業系統中必須注意到的一點

執行緒設計要點

上下文環境 對於鍵盤事件,在32的Radio中,由於硬體的限制,系統需要自行查詢按鍵狀態,即不能夠在中斷服務的上下文中執行,所以應該單獨開闢一個key執行緒進行處理按鍵 執行緒的狀態躍遷 執行緒執行中狀態的變化,實時系統作為一款優先順序的系統,如果一個執行緒只有就緒態而無阻塞態,勢必會影響到其他低優先順序現成的執行。所以線上程設計時應該保證執行緒在不活躍的時候必須讓出cpu,即主動讓出資源。這就要求我們明確需要在什麼情況下讓執行緒送就緒態躍遷到阻塞態。 執行緒執行時間長度

執行緒由阻塞態躍遷為就緒態執行設定的工作,再從就緒態躍遷為阻塞態所需要的時間(一般還應加上這段時間內,這個執行緒不會被其他執行緒所搶佔的先決條件)。