欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

FreeRTOS實(shí)時(shí)操作系統(tǒng)的任務(wù)創(chuàng)建和刪除

 更新時(shí)間:2022年04月06日 18:47:30   作者:zhzht19861011  
這篇文章主要為大家介紹了FreeRTOS實(shí)時(shí)操作系統(tǒng)的任務(wù)創(chuàng)建和刪除,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪

前言 

在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)文章!

相關(guān)文章

最新評論