優先順序和時間片是執行緒的兩個重要引數,分別描述執行緒競爭處理器資源的能力和持有處理器時間長短的能力。
rt-thread支援256個優先順序。數值越小,優先順序越高。0為最高優先順序,最低優先順序預留給空閒執行緒。使用者可以通過rt_config.h中的rt_thread_priority_max巨集來修改最大支援的優先順序。針對stm32預設設定最大支援32個優先順序。
具體應用中,執行緒總數不受限制,可以建立多個優先順序相同的執行緒。能建立的執行緒總數只和具體硬體平台的記憶體有關。
時間片只在相同優先順序的就緒態執行緒中起作用,系統對相同優先順序的就緒態執行緒採用時間片輪轉的排程方式進行排程。時間片起到約束執行緒單次執行時長的作用,其單位是乙個系統節拍(os tick)。
假設有2個相同優先順序的就緒態執行緒a和b,a執行緒的時間片設定為10,b執行緒的時間片設定為5,那麼,當系統中不存在高於a執行緒優先順序的就緒態執行緒時,系統會在a、b執行緒間來回切換執行,並且每次對a執行緒執行10個節拍的時長,對b執行5個節拍的時長。
作業系統總是讓具有最高優先順序的就緒任務有限執行:當有任務的優先順序高於當前任務的優先順序並且處於就緒態後,就一定會發生系統排程。
通過優先順序搶占機制,最大限度地滿足了系統的實時性。
當作業系統中存在優先順序相同的執行緒時(優先順序相同就不會發生搶占),作業系統會按照執行緒設定的時間片大小輪流排程執行緒,時間片起到約束執行緒單次執行時長的作用,其單位是1個系統節拍(os tick)。
時間片輪詢排程機制,保證優先順序相同的執行緒輪流占用處理器。
timeslice_sample.c
1 #include 2timeslice_sample.c3#define thread_stack_size 1024
4#define thread_priority 20
5#define thread_timeslice 1067
/*執行緒入口 */8
static
void thread_entry(void*parameter)
923 count++;
24} 25}
2627
int timeslice_sample(void)28
4849
/*匯出到 msh 命令列表中
*/50 msh_cmd_export(timeslice_sample, timeslice sample);
兩個執行緒使用了同乙個入口**。
執行緒**中,將執行緒傳入的引數儲存在變數中,並計數。然後列印執行緒引數和計數值。
**是迴圈執行的形式,但是是順序執行的,因為迴圈內部有迴圈跳出。
RT Thread 執行緒時間片輪轉
建立兩個執行緒,堆和優先順序相同,執行緒1 時間片為10 執行緒2時間片為5。注意 時間片輪轉機制,在 os tick 到來時,正在執行的執行緒時間片減 1 建立執行緒 thread1 和 thread2,優先順序相同為 20,thread1 時間片為 10,thread2 時間片為 5 2 啟動執...
RT Thread 執行緒的建立
基本概念 執行緒是實現任務的載體,它是rt thread中最基本的排程單位,它描述了乙個 任務執行的執行環境,也描述了這個任務所處的優先等級。rt thread中,執行緒由三部分組成 執行緒 入口函式 執行緒控制塊 執行緒堆疊 1 建立程序 1 建立靜態執行緒 rt err t rt thread ...
普通接收函式的改進(時間片 執行緒實現)
最最開始,我的資料接收是用wxwi中的定時器定時讀取來實現的,定時器中函式如下 void scomtestframe ontimer1trigger wxtimerevent event 這其中附帶將資料顯示在wxtextctrl中的處理,那個hexflag實際上是十進位制顯示。我當時找了一頓竟然發...