RTT例程練習 1 4 執行緒優先順序搶占

2021-06-12 16:03:41 字數 1360 閱讀 5352

rtt 是搶占式的rtos,高優先順序的執行緒會先執行。

這個例程顯示了是如何搶占的。

解釋我懶得寫了,下面這段來自官網論壇:

因為更高的優先順序,thread1率先得到執行,隨後它呼叫延時,時間為3個系統tick,於是thread2得到執行。可以從列印結果中發現乙個規律,在第一次thread2了列印兩次thread1會列印一次之後,接下來的話thread2每列印三次thread1會列印一次。對兩個執行緒的入口程式進行分析可以發現,在thread1 3個系統tick的延時裡,thread2實際會得到三次執行機會,但顯然在thread1的第乙個延時內thread2第三次執行並沒有執行結束,在第三次延時結束以後,thread2本應該執行第三次列印計數的,但是由於thread1此時的延時也結束了,而其優先順序相比thread2要高,所以搶占了thread2的執行而開始執行。當thread1再次進入延時時,之前被搶占的thread2的列印得以繼續,然後在經過兩次1個系統tick延時和兩次列印計數後,在第三次系統tick結束後又遇到了thread1的延時結束,thread1再次搶占獲得執行,所以在這次thread1列印之前,thread2執行了三次列印計數。

程式:

#include struct rt_thread thread1;

struct rt_thread thread2;

static rt_uint8_t thread1_stack[512];

static rt_uint8_t thread2_stack[512];

static void thread1_entry(void *parameter)

}static void thread2_entry(void *parameter)

}/*@}*/

輸出結果:

\ | /

- rt - thread operating system

/ | \ 1.1.0 build aug 10 2012

tick = 1

tick = 1001

count = 0

tick = 2001

tick = 3002

tick = 4002

count = 1

tick = 5002

tick = 6002

tick = 7002

count = 2

tick = 8002

tick = 9002

tick = 10002

count = 3

tick = 11003

tick = 12004

tick = 13005

count = 4

tick = 14006

RTT例程練習 1 5 優先順序相同執行緒輪轉排程

之前說過,相同優先順序的執行緒,在自己的時間片用光之後,會被剝奪排程器,讓給同優先順序的其他執行緒。程式 include static struct rt thread thread1 static struct rt thread thread2 static char thread1 stack...

RTT例程練習 1 5 優先順序相同執行緒輪轉排程

之前說過,相同優先順序的執行緒,在自己的時間片用光之後,會被剝奪排程器,讓給同優先順序的其他執行緒。程式 include static struct rt thread thread1 static struct rt thread thread2 static char thread1 stack...

RTT例程練習 1 3 執行緒讓出

rtt 支援相同優先順序,而ucosii 不支援。如果乙個執行緒不呼叫rt thread delay 來讓出排程器,那麼它就會一直執行,其它執行緒永遠處於就緒態。而相同優先順序的執行緒,在初始化或建立時還定義了其單次執行的最長的時間片,強迫其讓出排程器。這裡,使用rt thread yield 也可...