RT-Thread中使用線程這個概念,而不是任務。二者類似,我在這裏把他的線程看成任務來理解了函數
1、任務處理:spa
動態任務相關API線程
建立任務:rt_thread_create函數,建立任務以後會返回rt_thread_t類型的任務IDcode
建立以後啓動任務:rt_thread_startup對象
刪除任務:rt_thread_deleteblog
任務延時函數:rt_thread_delay 延時時候,任務處於suspend狀態內存
任務運行狀況可用finish模塊,在電腦終端查看編譯器
二、動態建立線程和靜態建立線程it
RT-Thread中支持靜態和動態兩種定義方式。用線程來舉例的話,rt_thread_init對應靜態定義方式,rt_thread_create對應動態定義方式。編譯
這兩種方式各有利弊,靜態定義方式會佔用RW/ZI空間,可是不須要動態分配內存,運行時效率較高,實時性較好。 動態方式不會佔用額外的RW/ZI空間,佔用空間小,可是運行時須要動態分配內存,效率沒有靜態方式高。
靜態建立線程代碼:
建立線程:rt_thread_init
啓動線程:rt_thread_startup
脫離線程:rt_thread_detach
//靜態建立線程 result = rt_thread_init(&thread1, //線程handle "static", //線程名 rt_init_thread_entry, //線程入口函數 RT_NULL, //線程入口參數 &thread1_stack[0], //線程棧地址 sizeof(thread1_stack), //線程棧大小 6, //線程優先級 10); //線程時間片
動態建立線程代碼:
建立線程:rt_thread_create
啓動線程:rt_thread_startup
線程啓動成功後,當OS調度開始,便可被OS調度執行。
tid = rt_thread_create("init", rt_init_thread_entry, RT_NULL, 2048, 10, 5); if (tid != RT_NULL) rt_thread_startup(tid);
空間使用比較
動態建立的線程,delete以後會釋放出空間
靜態建立的線程,detach以後不會釋放空間