FreeRTOS Task的创建和删除

创建

一般使用xTaskCreate函数进行创建

void xTaskCreate(TaskFunction_t pvTaskCode, const char * const pcName, const uint32_t usStackDepth, void * const pvParameters, UBaseType_t uxPriority, TaskHandle_t * const pvCreatedTask);

其中参数所表述的意义是:

1、Task的指针
2、Task的名称(一个字符串)
3、Task所分配的栈的大小
4、传递参数,因为这里没有所以是空
5、优先度
6、Task的句柄函数(用于启动,停止,删除Task)

删除

如果说一个Task创建不需要进行删除的话,是可以不设置句柄函数的(为NULL),但是如果要删除(在外面)那么我们需要设置句柄函数,调用vTaskDelete对其进行删除操作。此时vTaskDelete中的指针为NULL为我们创建的句柄。

当然也可以在Task里面自己运行结束后,自己删除自己,此时vTaskDelete中的指针为NULL

详情可以见下面的代码,使用的是hello_world工程进行改的:

/* Hello World Example

   This example code is in the Public Domain (or CC0 licensed, at your option.)

   Unless required by applicable law or agreed to in writing, this
   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
   CONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
//-----------------------------------------------------------------------------------------------------------------
void MyTask(void *pvParam){
    while(1){
        printf("Hello world! This is MyTask!\n");
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}
//-----------------------------------------------------------------------------------------------------------------
void app_main(void)
{
    TaskHandle_t myhandle =NULL;
    xTaskCreate(MyTask,"mytask1",1024,NULL,1,&myhandle);//任务指针,任务名称,任务分配的栈大小,传递参数这里因为没有所以是空,优先度是1(比空闲0高一点),task的句柄函数(停止task,启动task,删除task)
    vTaskDelay(5000 / portTICK_PERIOD_MS);
    if(myhandle!=NULL)
    vTaskDelete(myhandle);

}

posted @ 2022-03-28 20:27  Mudrobot  阅读(153)  评论(0编辑  收藏  举报