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 也可...