FreeRTOS的任务删除

FreeRTOS的任务删除并不常用,下面把有任务删除部分的代码贴出来:

//**************************************************************
//                      具体任务函数
//函数名:Start_Task
//**************************************************************
void Start_Task(void *pvParameters)
{
	//创建任务1:
    xTaskCreate((TaskFunction_t)    Task1,             //任务函数名
				(const char *)      "Task1",           //任务名称(随便取)
				(uint16_t)          TASK1_SIZE,        //任务堆栈大小
				(void *)            NULL,              //任务参数,一般为空
				(UBaseType_t)       TASK1_PRIO,        //任务优先级
				(TaskHandle_t *)    &Task1_Handler);   //任务句柄
    //创建任务2:
    xTaskCreate((TaskFunction_t)    Task2,             //任务函数名
				(const char *)      "Task2",           //任务名称(随便取)
				(uint16_t)          TASK2_SIZE,        //任务堆栈大小
				(void *)            NULL,              //任务参数,一般为空
				(UBaseType_t)       TASK2_PRIO,        //任务优先级
				(TaskHandle_t *)    &Task2_Handler);   //任务句柄
    
    vTaskDelete(Start_Task_Handler);                   //创建其它任务后,删除自己,参数为待删除任务的任务句柄
    //vTaskDelete(NULL);                               //如果任务在任务函数中删除自己,也可以将参数写为"NULL",就像这个里面一样。
}

下面我参照正点原子写的,里面有任务删除过程,上面那段代码就是摘自这个里面:

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "FreeRTOS.h"
#include "task.h"

//本例程大体结构:
//例程主要学习任务的动态创建,先是创建一个开始创建任务的任务,然后在这个任务里面又创建另外两个任务.
//任务创建的步骤:
//1、大体构思任务框架;
//2、准备好任务创建函数:"xTaskCreate();"
//3、将任务创建函数"xTaskCreate()"里面的参数都准备好填进去,
//   任务参数就是:任务函数的函数名、任务名、堆栈、优先级、句柄;
//4、编写任务的具体函数,函数体内搞个大循环,剩下的就是具体的功能了;
//5、一切准备好后,开启任务调度器.


//====================开始任务函数相关========================
void Start_Task(void *pvParameters);//任务函数声明
#define START_TASK_SIZE     120     //任务堆栈大小
#define START_TASK_PRIO     1       //任务优先级,注意,优先级“0”不能用,这个是空闲任务的优先级,
                                    //空闲任务在开启任务调度器中会自动创建
                                    //还有一个软件定时器任务,这个任务优先级是最高的31,这个也不能用
TaskHandle_t Start_Task_Handler;    //任务句柄

//========================任务1相关========================
void Task1(void *pvParameters);     //任务函数声明
#define TASK1_SIZE     120          //任务堆栈大小
#define TASK1_PRIO     2            //任务优先级,注意,优先级“0”不能用,这个是空闲任务的优先级,
                                    //空闲任务在开启任务调度器中会自动创建
                                    //还有一个软件定时器任务,这个任务优先级是最高的31,这个也不能用
TaskHandle_t Task1_Handler;         //任务句柄

//========================任务2相关========================
void Task2(void *pvParameters);     //任务函数声明
#define TASK2_SIZE     120          //任务堆栈大小
#define TASK2_PRIO     3            //任务优先级,注意,优先级“0”不能用,这个是空闲任务的优先级,
                                    //空闲任务在开启任务调度器中会自动创建
                                    //还有一个软件定时器任务,这个任务优先级是最高的31,这个也不能用
TaskHandle_t Task2_Handler;         //任务句柄



int main(void)
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4	 
	delay_init();	    				//延时函数初始化	  
	uart_init(115200);					//初始化串口
	LED_Init();		  					//初始化LED
    
    //创建任务:
    //(这个任务里面再去创建其它任务)
    xTaskCreate((TaskFunction_t)    Start_Task,             //任务函数名
				(const char *)      "Start_Task",           //任务名称(随便取)
				(uint16_t)          START_TASK_SIZE,        //任务堆栈大小
				(void *)            NULL,                   //任务参数,一般为空
				(UBaseType_t)       START_TASK_PRIO,        //任务优先级
				(TaskHandle_t *)    &Start_Task_Handler);   //任务句柄
    
    vTaskStartScheduler();                                  //开启任务调度器
}



//**************************************************************
//                      具体任务函数
//函数名:Start_Task
//**************************************************************
void Start_Task(void *pvParameters)
{
	//创建任务1:
    xTaskCreate((TaskFunction_t)    Task1,             //任务函数名
				(const char *)      "Task1",           //任务名称(随便取)
				(uint16_t)          TASK1_SIZE,        //任务堆栈大小
				(void *)            NULL,              //任务参数,一般为空
				(UBaseType_t)       TASK1_PRIO,        //任务优先级
				(TaskHandle_t *)    &Task1_Handler);   //任务句柄
    //创建任务2:
    xTaskCreate((TaskFunction_t)    Task2,             //任务函数名
				(const char *)      "Task2",           //任务名称(随便取)
				(uint16_t)          TASK2_SIZE,        //任务堆栈大小
				(void *)            NULL,              //任务参数,一般为空
				(UBaseType_t)       TASK2_PRIO,        //任务优先级
				(TaskHandle_t *)    &Task2_Handler);   //任务句柄
    
    vTaskDelete(Start_Task_Handler);                   //创建其它任务后,删除自己,参数为待删除任务的任务句柄
    //vTaskDelete(NULL);                               //如果任务在任务函数中删除自己,也可以将参数写为"NULL",就像这个里面一样。
}

//**************************************************************
//                      具体任务函数
//函数名:Task1
//**************************************************************
void Task1(void *pvParameters)
{
	while(1)
    {
        LED0=~LED0;
        vTaskDelay(200);
    }
}

//**************************************************************
//                      具体任务函数
//函数名:Task2
//**************************************************************
void Task2(void *pvParameters)
{
	while(1)
    {
        LED1=~LED1;
        vTaskDelay(200);
    }
}


猜你喜欢

转载自blog.csdn.net/anglebaby331/article/details/82935242
今日推荐