FreeRTOS任務創建刪除


FreeRTOS 當前使用的api 接口為

xTaskCreate()
xTaskCreateRestricted()
xTaskCreateStatic()
vTaskDelete()

 


 xTaskCreate() 函數原型

BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,      
             const char * const pcName,      
             const uint16_t usStackDepth,     
             void * const pvParameters,      
             UBaseType_t uxPriority,        
               TaskHandle_t * const pxCreatedTask )

 pxTaskCode : 實現任務的主要功能的函數,其返回值是void 類型,參數是void * 類型

const pcName:任務名,其長度由宏 configMAX_TASK_NAME_LEN 決定,一般16
StackDepth : 堆棧的大小設置。實際大小是該值4倍,因為它是4字節大小。
pvParameters :需要傳遞給任務的參數,
uxPriority : 任務優先級,范圍:0-configMAX_PRIORITIES
pxCreatedTask :創建成功后的任務句柄保存在這個參數里面,供其他API 使用。比如任務刪除

創建成功后,返回值為: pdPASS.   其他則為失敗,可能的原因堆內存分配失敗。

由於任務需要ram 來進行堆棧的分配和存儲,這部分自動從FreeRTOS 的堆中分配。由於這個函數需要系統來幫助任務做這些處理所以需要freertos 提供內存管理和分配,因此對於freeRTOS 來說需要提供一個內存管理文件,如heap_x.c ,同時宏configSUPPORT_DYNAMIC_ALLOCATION 需要定義為1.

 

xTaskCreateStatic() 函數原型

TaskHandle_t xTaskCreateStatic(    TaskFunction_t pxTaskCode,
                                const char * const pcName,
                                const uint32_t ulStackDepth,
                                void * const pvParameters,
                                UBaseType_t uxPriority,
                                StackType_t * const puxStackBuffer,
                                StaticTask_t * const pxTaskBuffer )

pxTaskCode: 要實現的任務的功能函數,返回類型void, 參數類型: void *

pcName: 任務的名字

ulStackDepth: 堆棧的大小,實際大小是該值的4倍,因為其對應的是int型大小字節空間

pvParameters: 傳遞給任務的參數

uxPriority: 優先級。范圍:0-configMAX_PRIORITIES

puxStackBuffer: 堆棧空間,這是由用戶指定的,一般就是一個數組,數組的大小就是上面ulStackDepth值。類型

        為StackType_t 類型。

pxTaskBuffer: 任務控制塊。

任務創建成功,返回任務句柄。

從參數上可以看出上面兩個函數區別,static 類型的任務創建,需要用戶手動指定堆棧,同時,增加了一個任務控制塊。


xTaskCreateRestricted() 函數原型

BaseType_t xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask )

這個函數創建的任務會受到MPU的保護,所以要求對應的mcu有MPU(內存保護單元), 除此以外,其他功能就和xTaskCreate 一樣了

 

vTaskDelete() 函數原型

void vTaskDelete( TaskHandle_t xTaskToDelete )

用於刪除一個由上面的xTaskCreate 和 xTaskCreateStatic創建的函數

調用次函數之后需要注意一些事項,

1,調用次函數之后,任務就不存在了,此時任務所占用的內存相關空間會在idle 任務運行時給釋放,因此

  需要給idle 任務一定的運行時間。

2,在任務中由用戶手動分配的空間,需要由用戶自己手動釋放,否則會造成內存泄漏

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM