FreeRTOS的任务删除

点击查看代码
/**
   *********************************************************************************
   * @file    main.c 
   * @author  
   * @version 
   * @date    2024/07/20
   * @brief   利用FreeRTOS的动态分配内存的方案来创建一个任务,学习API接口的使用流程
							创建一个任务,用于点亮一盏LED灯  PF9 -- LED0
						  
					
   *********************************************************************************
**/

#include "stm32f4xx.h"  //必须包含
#include <stdio.h>
#include "uart.h"
#include "FreeRTOS.h"
#include "task.h"

TaskHandle_t Task1_Handle = NULL;  //用于存储创建的任务句柄
TaskHandle_t Task2_Handle = NULL;  //用于存储创建的任务句柄
	
//任务的接口
void task1(void *arg)
{
	USART1_SendString("task1 is create success!\r\n");
	
	for(;;)
	{
		 USART1_SendString("task1 is running!\r\n");
		
		 //删除自身
		 vTaskDelete(NULL);
	}

}

//任务的接口
void task2(void *arg)
{
	USART1_SendString("task2 is create success!\r\n");
	
	for(;;)
	{
		 USART1_SendString("task2 is running!\r\n");
		
		 //删除task1
		 vTaskDelete(Task1_Handle);
	}

}

int main()
{
	BaseType_t xReturned;
	
	
	//1.硬件的初始化
	USART1_Config(9600);
	
	//2.创建2个任务
	xReturned = xTaskCreate(
														task1,       				//任务的地址
														"task1",     				//任务的描述
														128,      					//任务的堆栈大小  128 * 32 / 8 = 512字节
														NULL,    						//任务接口的参数,无需传参则填NULL
														1,									//任务的优先级    范围 0 ~ configMAX_PRIORITIES - 1
														&Task1_Handle 			//任务的句柄,是为了提供给其他函数使用的
													);
	
	xReturned = xTaskCreate(
														task2,       				//任务的地址
														"task2",     				//任务的描述
														128,      					//任务的堆栈大小  128 * 32 / 8 = 512字节
														NULL,    						//任务接口的参数,无需传参则填NULL
														2,									//任务的优先级    范围 0 ~ configMAX_PRIORITIES - 1
														&Task2_Handle 			//任务的句柄,是为了提供给其他函数使用的
													);
  //错误处理	
	if( xReturned != pdPASS )
	{

	}
	
	//3.启动调度器
	vTaskStartScheduler();
	
	while(1)
	{
		
	}
}





posted @ 2025-08-30 12:34  w1888  阅读(2)  评论(0)    收藏  举报