FreeRTOS實(shí)時(shí)操作系統(tǒng)的任務(wù)創(chuàng)建和刪除
前言
在FreeRTOS移植到Cortex-M3硬件平臺(tái)的文章中,我們已經(jīng)見(jiàn)過(guò)任務(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)核寫(xiě)了兩個(gè)移植方案,一個(gè)是普通的FreeRTOS移植層,還有一個(gè)是FreeRTOS-MPU移植層。后者包含完整的內(nèi)存保護(hù)),那么推薦使用函數(shù)xTaskCreateRestricted()來(lái)代替xTaskCreate()。在使用FreeRTOS-MPU的情況下,使用xTaskCreate()函數(shù)可以創(chuàng)建運(yùn)行在特權(quán)模式或用戶(hù)模式(見(jiàn)下面對(duì)函數(shù)參數(shù)uxPriority的描述)的任務(wù)。當(dāng)運(yùn)行在特權(quán)模式下,任務(wù)可以訪(fǎng)問(wèn)整個(gè)內(nèi)存映射;當(dāng)處于用戶(hù)模式下,任務(wù)僅能訪(fǎng)問(wèn)自己的堆棧。無(wú)論在何種模式下,MPU都不會(huì)自動(dòng)捕獲堆棧溢出,因此標(biāo)準(zhǔn)的FreeRTOS堆棧溢出檢測(cè)機(jī)制仍然會(huì)被用到。xTaskCreateRestricted()函數(shù)具有更大的靈活性。
1.2參數(shù)描述
pvTaskCode:指針,指向任務(wù)函數(shù)的入口。任務(wù)永遠(yuǎn)不會(huì)返回(位于死循環(huán)內(nèi))。該參數(shù)類(lèi)型TaskFunction_t定義在文件projdefs.h中,定義為:typedefvoid (*TaskFunction_t)( void * )。
pcName:任務(wù)描述。主要用于調(diào)試。字符串的最大長(zhǎng)度由宏configMAX_TASK_NAME_LEN指定,該宏位于FreeRTOSConfig.h文件中。
usStackDepth:指定任務(wù)堆棧大小,能夠支持的堆棧變量數(shù)量,而不是字節(jié)數(shù)。比如,在16位寬度的堆棧下,usStackDepth定義為100,則實(shí)際使用200字節(jié)堆棧存儲(chǔ)空間。堆棧的寬度乘以深度必須不超過(guò)size_t類(lèi)型所能表示的最大值。比如,size_t為16位,則可以表示的最大值是65535。
pvParameters:指針,當(dāng)任務(wù)創(chuàng)建時(shí),作為一個(gè)參數(shù)傳遞給任務(wù)。
uxPriority:任務(wù)的優(yōu)先級(jí)。具有MPU支持的系統(tǒng),可以通過(guò)置位優(yōu)先級(jí)參數(shù)的portPRIVILEGE_BIT位,隨意的在特權(quán)(系統(tǒng))模式下創(chuàng)建任務(wù)。比如,創(chuàng)建一個(gè)優(yōu)先級(jí)為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ò)誤碼,具體參見(jiàn)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ì)有太長(zhǎng)的生存周期,因?yàn)?
中斷和高優(yōu)先級(jí)任務(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)建和刪除的資料請(qǐ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)階之調(diào)度器啟動(dòng)過(guò)程分析
這篇文章主要為大家介紹了FreeRTOS進(jìn)階之調(diào)度器啟動(dòng)過(guò)程分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04
freertos實(shí)時(shí)操作系統(tǒng)空閑任務(wù)阻塞延時(shí)示例解析
這篇文章主要為大家介紹了freertos實(shí)時(shí)操作系統(tǒng)的空閑任務(wù)及阻塞延時(shí)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
FreeRTOS信號(hào)量API函數(shù)基礎(chǔ)教程
這篇文章主要為大家介紹了FreeRTOS信號(hào)量API函數(shù)的基礎(chǔ)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04
FreeRTOS進(jìn)階之系統(tǒng)延時(shí)完全解析
這篇文章主要為大家介紹了FreeRTOS進(jìn)階之系統(tǒng)延時(shí)完全解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04
FreeRTOS動(dòng)態(tài)內(nèi)存分配管理heap_4示例
這篇文章主要為大家介紹了FreeRTOS動(dòng)態(tài)內(nèi)存分配管理heap_4示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04
FreeRTOS實(shí)時(shí)操作系統(tǒng)特點(diǎn)介紹
這篇文章主要為大家介紹了FreeRTOS實(shí)時(shí)操作系統(tǒng)特點(diǎn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04
FreeRTOS實(shí)時(shí)操作系統(tǒng)隊(duì)列的API函數(shù)講解
這篇文章主要為大家介紹了FreeRTOS實(shí)時(shí)操作系統(tǒng)隊(duì)列的API函數(shù)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04
FreeRTOS任務(wù)控制API函數(shù)的功能分析
這篇文章主要為大家介紹了FreeRTOS任務(wù)控制API函數(shù)的功能分析,F(xiàn)reeRTOS任務(wù)控制API函數(shù)主要實(shí)現(xiàn)任務(wù)延時(shí)、任務(wù)掛起、解除任務(wù)掛起、任務(wù)優(yōu)先級(jí)獲取和設(shè)置等功能2022-04-04
FreeRTOS進(jìn)階之任務(wù)通知示例完全解析
這篇文章主要為大家介紹了FreeRTOS進(jìn)階系列之任務(wù)通知的示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04
FreeRTOS編碼標(biāo)準(zhǔn)及風(fēng)格指南
這篇文章主要為大家介紹了FreeRTOS編碼標(biāo)準(zhǔn)及風(fēng)格指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04

