RTT線程管理
RTT線程管理
RRT是將一個大任務(wù)分解成多個小任務(wù),線程是實現(xiàn)任務(wù)的載體,是RTT的最基本調(diào)度單位,描述了一個任務(wù)執(zhí)行的運行環(huán)境和優(yōu)先等級線程在運行時會認為自己是以獨占CPU的方式運行。
功能特點:
主要功能:對線程進行管理和調(diào)度將所有線程分為系統(tǒng)線程和用戶線程
系統(tǒng)線程:由RTT內(nèi)核創(chuàng)建的線程
用戶線程:由應(yīng)用程序創(chuàng)建的線程
線程從內(nèi)核對象容器中分配線程對象,當(dāng)線程被刪除時也會被從對象容器中刪除
RTT線程調(diào)度器為搶占式:從就緒線程列表中查找最高優(yōu)先級線程,保證它能夠被運行,最高優(yōu)先級任務(wù)一旦就緒,總能得到CPU的使用權(quán);當(dāng)一個運行著的線程使一個比它優(yōu)先級高的線程滿足運行條件,當(dāng)前線程的CPU使用權(quán)就會被讓出給更高優(yōu)先級的線程;當(dāng)中斷服務(wù)程序讓一個高優(yōu)先級的線程滿足運行條件,中斷完成時,被中斷的線程掛起,優(yōu)先級高的線程開始運行
調(diào)度器切換線程的步驟:
1、保存當(dāng)前線程上下文/掛起被中斷線程
2、切換到高優(yōu)先級線程
3、等待高優(yōu)先級線程運行完畢
4、切換回之前的線程
5、恢復(fù)當(dāng)前線程上下文
線程的基本操作:創(chuàng)建/初始化線程、啟動線程、運行線程、刪除/脫離線程。對于動態(tài)線程使用rt_thread_create()創(chuàng)建,動態(tài)線程會自動從動態(tài)內(nèi)存堆上分配棧空間與線程句柄(隱含條件:初始化heap后才能使用create創(chuàng)建動態(tài)線程);使用rt_thread_init()初始化靜態(tài)線程,由用戶為其分配??臻g和線程句柄。
注意分配出的棧空間是按照rtconfig.h中配置的RT_ALIGN_SIZE方式對齊。
線程創(chuàng)建成功返回線程句柄,失敗則返回RT_NULL。
使用rt_thread_delete()刪除線程。
這個函數(shù)僅在使能了系統(tǒng)動態(tài)堆時才有效(即已經(jīng)定義RT_USING_HEAP)。
用此函數(shù)刪除線程接口僅僅釋放掉了部分控制資源,讓線程變?yōu)殛P(guān)閉態(tài),不讓它再使用CPU,真正釋放線程控制塊和釋放線程棧要到下次執(zhí)行空閑線程時,由空閑線程執(zhí)行最后的線程刪除任務(wù)。
也就是說rt_thread_delete()負責(zé)把線程弄死,但尸體還堆在內(nèi)存里,空閑線程會完成收尸工作。
RT-Thread 線程的優(yōu)先級是表示線程被調(diào)度的優(yōu)先程度。每個線程都具有優(yōu)先級,線程越重要,賦予的優(yōu)先級就應(yīng)越高,線程被調(diào)度的可能才會越大。
RT-Thread 最大支持 256 個線程優(yōu)先級 (0~255),數(shù)值越小的優(yōu)先級越高,0 為最高優(yōu)先級。在一些資源比較緊張的系統(tǒng)中,可以根據(jù)實際情況選擇只支持 8 個或 32 個優(yōu)先級的系統(tǒng)配置;對于 ARM Cortex-M 系列,普遍采用 32 個優(yōu)先級。最低優(yōu)先級默認分配給空閑線程使用,用戶一般不使用。在系統(tǒng)中,當(dāng)有比當(dāng)前線程優(yōu)先級更高的線程就緒時,當(dāng)前線程將立刻被換出,高優(yōu)先級線程搶占處理器運行。
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。