点击查看代码
/**
*********************************************************************************
* @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)
{
}
}