【STM32】FreeRTOS任务相关API
生活随笔
收集整理的這篇文章主要介紹了
【STM32】FreeRTOS任务相关API
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
00. 目錄
文章目錄
- 00. 目錄
- 01. 概述
- 02. xTaskCreate()函數
- 03. xTaskCreateStatic()函數
- 04. xTaskCreateRestricted()函數
- 05. vTaskDelete()函數
- 06. 附錄
- 07. 參考
01. 概述
FreeRTOS最基本的功能就是任務管理,而任務掛你最基本的操作就是創建和刪除任務,FreeRTOS的任務創建和刪除API函數如下表所示:
02. xTaskCreate()函數
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,const char * const pcName, const configSTACK_DEPTH_TYPE usStackDepth,void * const pvParameters,UBaseType_t uxPriority,TaskHandle_t * const pxCreatedTask ) 功能:創建一個任務,任務需要RAM來保存與任務有關的狀態信息(任務控制塊),任務也需要一定的RAM來作為任務堆棧。如果使用函數xTaskCreate()來創建任務的話那么這些所需的RAM就會自動的從FreeRTOS的堆中分配。參數:pxTaskCode 任務函數pcName 任務名字,一般用于追蹤和調試,任務名字長度不能超過configMax_TASK_NAME_LEN。usStackDepth 任務堆棧大小,注意實際申請到的堆棧是usStackDepth的4倍。其中空閑任務的任務堆棧大小為configMINIMAL_STACK_SIZE。pvParameters 傳遞給任務函數的參數uxPriority 任務優先級,范圍0-configMAX_PRIORITIES-1pxCreatedTask 任務句柄,任務創建成功以后會返回此任務的任務句柄,這個句柄其實就是任務的任務堆棧。此參數就用來保存這個任務句柄。其它API函數可能會使用到這個句柄。 返回值:pdPASS 成功創建任務errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY 任務創建失敗 因為堆內存不足應用示例
/* 創建任務. */ void vTaskCode( void * pvParameters ) {for( ;; ){/* 任務代碼放在這里 */} }/* 創建任務函數 */ void vOtherFunction( void ) {static unsigned char ucParameterToPass;xTaskHandlexHandle;/* 創建任務,存儲句柄。注:傳遞的參數ucParameterToPass必須和任務具有相同的生存周期,因此這里定義為靜態變量。如果它只是一個自動變量,可能不會有太長的生存周期,因為中斷和高優先級任務可能會用到它。 */xTaskCreate( vTaskCode, "NAME", STACK_SIZE,&ucParameterToPass, tskIDLE_PRIORITY, &xHandle );/* 使用句柄刪除任務. */if( xHandle !=NULL ){vTaskDelete( xHandle );} }03. 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 ) 此函數和xTaskCreate()的功能相同,也是用來創建任務的,但是使用此函數創建的任務所需的RAM需要用戶來提供。如果要使用該函數的話就需要將宏configSUPPORT_STATIC_ALLOCATION定義為1。參數:pxTaskCode 任務函數pcName 任務名字,一般用于追蹤和調試,任務名字長度不能超過configMax_TASK_NAME_LEN。usStackDepth 任務堆棧大小,注意實際申請到的堆棧是usStackDepth的4倍。其中空閑任務的任務堆棧大小為configMINIMAL_STACK_SIZE。pvParameters 傳遞給任務函數的參數uxPriority 任務優先級,范圍0-configMAX_PRIORITIES-1puxStackBuffer 任務堆棧 一般為數組,數組類型腰圍StackType_t類型。pxTaskBuffer 任務控制塊返回值:NULL 任務創建失敗,puxStackBuffer或者pxTaskBuffer為NULL的時候會導致這個錯誤的發生。其它值 任務創建成功,返回任務的任務句柄04. xTaskCreateRestricted()函數
BaseType_t xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition,TaskHandle_t * pxCreatedTask ) 功能:創建任務,只不過此函數要求所使用的MCU有MPU內存保護單元,用此函數創建的任務會收到MPU的保護,其它的功能和函數xTAskCreate()一樣。 參數:pxTaskDefinition 指向一個結構體TaskParameters_t,這個及餓哦固體描述了任務的任務函數,堆棧大小,優先級等。pxCreatedTask 任務句柄 返回值:pdPASS 任務創建成功其它值 任務為創建成功,很有可能是因為FreeRTOS的堆太小了。05. vTaskDelete()函數
從RTOS內核管理器中刪除一個任務。任務刪除后將會從就緒、阻塞、暫停和事件列表中移除。在文件FreeRTOSConfig.h中,必須定義宏INCLUDE_vTaskDelete 為1,本函數才有效。
注:被刪除的任務,其在任務創建時由內核分配的存儲空間,會由空閑任務釋放。如果有應用程序調用xTaskDelete(),必須保證空閑任務獲取一定的微控制器處理時間。任務代碼自己分配的內存是不會自動釋放的,因此刪除任務前,應該將這些內存釋放。
void vTaskDelete( TaskHandle_t xTaskToDelete ) 功能:刪除一個用函數xTaskCreate()或者xTaskCreateStatic()創建的任務。 參數:xTaskToDelete 要刪除的任務的任務句柄 返回值:無06. 附錄
6.1 【STM32】STM32系列教程匯總
網址:【STM32】STM32系列教程匯總
07. 參考
《FreeRTOS Reference Manual》
《Using the FreeRTOS Real Time Kernel -A Practical Guide》
《The Definitive Guide to ARM Cortex-M3 and Cortex-M4 Processors,3rd Edition》
總結
以上是生活随笔為你收集整理的【STM32】FreeRTOS任务相关API的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【STM32】FreeRTOS中断示例
- 下一篇: 【STM32】FreeRTOS创建和删除