RT-Thread的線程(任務)處理【RT-Thread學習筆記 2】

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對應動態定義方式。編譯

  • 使用靜態定義方式時,必須先定義靜態的線程控制塊,而且定義好堆棧空間,而後調用rt_thread_init來完成線程的初始化工做。採用這種 方式,線程控制塊和堆棧佔用的內存會放在RW段,這段空間在編譯時就已經肯定,它不是能夠動態分配的,因此不能被釋放,而只能使用 rt_thread_detach函數將該線程控制塊從對象管理器中脫離。
  • 使用動態定義方式rt_thread_create時,RT-Thread會動態申請線程控制塊和堆棧空間。在編譯時,編譯器是不會感知到這段空 間的,只有在程序運行時,RT-Thread纔會從系統堆中申請分配這段內存空間,當不須要使用該線程時,調用rt_thread_delete函數就會 將這段申請的內存空間從新釋放到內存堆中。

這兩種方式各有利弊,靜態定義方式會佔用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以後不會釋放空間

相關文章
相關標籤/搜索