FreeRTOS實時操作系統(tǒng)的任務(wù)創(chuàng)建和刪除
前言
在FreeRTOS移植到Cortex-M3硬件平臺的文章中,我們已經(jīng)見過任務(wù)創(chuàng)建API,但那篇文章的重點在于如何移植FreeRTOS,本文將重點放在任務(wù)的創(chuàng)建和刪除API函數(shù)上面。
任務(wù)創(chuàng)建和刪除API函數(shù)位于文件task.c中,需要包含task.h頭文件。
1.任務(wù)創(chuàng)建
1.1函數(shù)描述
BaseType_t xTaskCreate( TaskFunction_t pvTaskCode, const char * const pcName, unsigned short usStackDepth, void *pvParameters, UBaseType_t uxPriority, TaskHandle_t * pvCreatedTask );
創(chuàng)建新的任務(wù)并加入任務(wù)就緒列表。
如果使用FreeRTOS-MPU(在官方下載包中,為Cortex-M3內(nèi)核寫了兩個移植方案,一個是普通的FreeRTOS移植層,還有一個是FreeRTOS-MPU移植層。后者包含完整的內(nèi)存保護),那么推薦使用函數(shù)xTaskCreateRestricted()來代替xTaskCreate()。在使用FreeRTOS-MPU的情況下,使用xTaskCreate()函數(shù)可以創(chuàng)建運行在特權(quán)模式或用戶模式(見下面對函數(shù)參數(shù)uxPriority的描述)的任務(wù)。當(dāng)運行在特權(quán)模式下,任務(wù)可以訪問整個內(nèi)存映射;當(dāng)處于用戶模式下,任務(wù)僅能訪問自己的堆棧。無論在何種模式下,MPU都不會自動捕獲堆棧溢出,因此標準的FreeRTOS堆棧溢出檢測機制仍然會被用到。xTaskCreateRestricted()函數(shù)具有更大的靈活性。
1.2參數(shù)描述
pvTaskCode
:指針,指向任務(wù)函數(shù)的入口。任務(wù)永遠不會返回(位于死循環(huán)內(nèi))。該參數(shù)類型TaskFunction_t定義在文件projdefs.h中,定義為:typedefvoid (*TaskFunction_t)( void * )。
pcName
:任務(wù)描述。主要用于調(diào)試。字符串的最大長度由宏configMAX_TASK_NAME_LEN指定,該宏位于FreeRTOSConfig.h文件中。
usStackDepth
:指定任務(wù)堆棧大小,能夠支持的堆棧變量數(shù)量,而不是字節(jié)數(shù)。比如,在16位寬度的堆棧下,usStackDepth定義為100,則實際使用200字節(jié)堆棧存儲空間。堆棧的寬度乘以深度必須不超過size_t類型所能表示的最大值。比如,size_t為16位,則可以表示的最大值是65535。
pvParameters
:指針,當(dāng)任務(wù)創(chuàng)建時,作為一個參數(shù)傳遞給任務(wù)。
uxPriority
:任務(wù)的優(yōu)先級。具有MPU支持的系統(tǒng),可以通過置位優(yōu)先級參數(shù)的portPRIVILEGE_BIT位,隨意的在特權(quán)(系統(tǒng))模式下創(chuàng)建任務(wù)。比如,創(chuàng)建一個優(yōu)先級為2的特權(quán)任務(wù),參數(shù)uxPriority可以設(shè)置為( 2 | portPRIVILEGE_BIT )。
pvCreatedTask
:用于回傳一個句柄(ID),創(chuàng)建任務(wù)后可以使用這個句柄引用任務(wù)。
1.3返回值
&&如果任務(wù)成功創(chuàng)建并加入就緒列表函數(shù)返回pdPASS,否則函數(shù)返回錯誤碼,具體參見projdefs.h。
1.4用法舉例
/* 創(chuàng)建任務(wù). */ void vTaskCode( void * pvParameters ) { for( ;; ) { /* 任務(wù)代碼放在這里 */ } } /* 創(chuàng)建任務(wù)函數(shù) */ void vOtherFunction( void ) { static unsigned char ucParameterToPass; xTaskHandlexHandle; /* 創(chuàng)建任務(wù),存儲句柄。注:傳遞的參數(shù)ucParameterToPass必須和任務(wù)具有相同的生存周期, 因此這里定義為靜態(tài)變量。如果它只是一個自動變量,可能不會有太長的生存周期,因為 中斷和高優(yōu)先級任務(wù)可能會用到它。 */ xTaskCreate( vTaskCode, "NAME", STACK_SIZE,&ucParameterToPass, tskIDLE_PRIORITY, &xHandle ); /* 使用句柄刪除任務(wù). */ if( xHandle !=NULL ) { vTaskDelete( xHandle ); } }
2.任務(wù)刪除
2.1任務(wù)描述
voidvTaskDelete( TaskHandle_t xTask );
從RTOS內(nèi)核管理器中刪除一個任務(wù)。任務(wù)刪除后將會從就緒、阻塞、暫停和事件列表中移除。在文件FreeRTOSConfig.h中,必須定義宏INCLUDE_vTaskDelete 為1,本函數(shù)才有效。
注:被刪除的任務(wù),其在任務(wù)創(chuàng)建時由內(nèi)核分配的存儲空間,會由空閑任務(wù)釋放。如果有應(yīng)用程序調(diào)用xTaskDelete(),必須保證空閑任務(wù)獲取一定的微控制器處理時間。任務(wù)代碼自己分配的內(nèi)存是不會自動釋放的,因此刪除任務(wù)前,應(yīng)該將這些內(nèi)存釋放。
2.2參數(shù)描述
xTask:被刪除任務(wù)的句柄。為NULL表示刪除當(dāng)前任務(wù)。
以上就是FreeRTOS實時操作系統(tǒng)的任務(wù)創(chuàng)建和刪除的詳細內(nèi)容,更多關(guān)于FreeRTOS任務(wù)創(chuàng)建和刪除的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
FreeRTOS動態(tài)內(nèi)存分配管理heap_5示例
這篇文章主要為大家介紹了FreeRTOS動態(tài)內(nèi)存分配管理heap_5示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-04-04FreeRTOS使用任務(wù)通知實現(xiàn)命令行解釋器
這篇文章主要為大家介紹了FreeRTOS使用任務(wù)通知實現(xiàn)命令行解釋器,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-04-04FreeRTOS實時操作系統(tǒng)空閑任務(wù)的阻塞延時實現(xiàn)
這篇文章主要為大家介紹了FreeRTOS實時操作系統(tǒng)空閑任務(wù)的阻塞延時實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-04-04FreeRTOS實時操作系統(tǒng)的任務(wù)創(chuàng)建和刪除
這篇文章主要為大家介紹了FreeRTOS實時操作系統(tǒng)的任務(wù)創(chuàng)建和刪除,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-04-04FreeRTOS動態(tài)內(nèi)存分配管理heap_1示例
這篇文章主要為大家介紹了FreeRTOS動態(tài)內(nèi)存分配管理heap_1的示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-04-04FreeRTOS實時操作系統(tǒng)的任務(wù)應(yīng)用函數(shù)詳解
這篇文章主要為大家介紹了FreeRTOS實時操作系統(tǒng)的任務(wù)應(yīng)用函數(shù)的解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-04-04