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