#define Start_Stack_Size 120 //任务堆栈大小
#define Start_Task_Prio 1 //任务优先级 0和31分别是空闲任务和软件定时器优先级,用户不能用
TaskHandle_t Start_Task_Handle; //任务句柄
void Start_Task( void * pvParameters ); //开始任务任务函数声明
#define Task1_Stack_Size 50
#define Task1_Prio 2
TaskHandle_t Task1_Handle;
void Task1_LED0( void * pvParameters ); //任务1函数声明
#define Task2_Stack_Size 50
#define Task2_Prio 2
TaskHandle_t Task2_Handle;
void Task2_LED1( void * pvParameters ); //任务2函数声明
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4 0-15一共16级优先级
delay_init(); //延时函数初始化
uart_init(115200); //初始化串口
LED_Init(); //初始化LED
xTaskCreate( (TaskFunction_t) Start_Task, //任务函数名
(const char* ) "Start_Task", //任务名称
(uint16_t ) Start_Stack_Size, //任务堆栈大小
(void * ) NULL, //传递给任务函数的参数
(UBaseType_t ) Start_Task_Prio, //任务优先级
(TaskHandle_t *) &Start_Task_Handle ); //任务句柄
vTaskStartScheduler(); //开启任务调度
}
//开始任务任务函数
void Start_Task( void * pvParameters )
{
//创建任务1
xTaskCreate( (TaskFunction_t) Task1_LED0, //任务函数名
(const char* ) "Task1_LED0", //任务名称
(uint16_t ) Task1_Stack_Size, //任务堆栈大小
(void * ) NULL, //传递给任务函数的参数
(UBaseType_t ) Task1_Prio, //任务优先级
(TaskHandle_t *) &Task1_Handle ); //任务句柄
//创建任务2
xTaskCreate( (TaskFunction_t) Task2_LED1, //任务函数名
(const char* ) "Task2_LED1", //任务名称
(uint16_t ) Task2_Stack_Size, //任务堆栈大小
(void * ) NULL, //传递给任务函数的参数
(UBaseType_t ) Task2_Prio, //任务优先级
(TaskHandle_t *) &Task2_Handle ); //任务句柄
vTaskDelete(Start_Task_Handle); //删除开始任务
taskEXIT_CRITICAL(); //退出临界区
}
//任务1任务函数
void Task1_LED0( void * pvParameters )
{
u8 count = 0;
while(1)
{
count++;
printf("任务1执行了%d次\r\n", count);
if(count == 5)
{
printf("任务1被删除了!\r\n");
vTaskDelete(Task1_Handle); //删除任务1
//printf("任务1被删除了!\r\n");
}
LED0 = !LED0;
vTaskDelay(500);
}
}
//任务2任务函数
void Task2_LED1( void * pvParameters )
{
u16 count = 0;
while(1)
{
count++;
printf("任务2执行了%d次\r\n", count);
LED1 = 0;
vTaskDelay(300);
LED1 = 1;
vTaskDelay(800);
}
}
#define Start_Task_Prio 1 //任务优先级 0和31分别是空闲任务和软件定时器优先级,用户不能用
TaskHandle_t Start_Task_Handle; //任务句柄
void Start_Task( void * pvParameters ); //开始任务任务函数声明
#define Task1_Stack_Size 50
#define Task1_Prio 2
TaskHandle_t Task1_Handle;
void Task1_LED0( void * pvParameters ); //任务1函数声明
#define Task2_Stack_Size 50
#define Task2_Prio 2
TaskHandle_t Task2_Handle;
void Task2_LED1( void * pvParameters ); //任务2函数声明
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4 0-15一共16级优先级
delay_init(); //延时函数初始化
uart_init(115200); //初始化串口
LED_Init(); //初始化LED
xTaskCreate( (TaskFunction_t) Start_Task, //任务函数名
(const char* ) "Start_Task", //任务名称
(uint16_t ) Start_Stack_Size, //任务堆栈大小
(void * ) NULL, //传递给任务函数的参数
(UBaseType_t ) Start_Task_Prio, //任务优先级
(TaskHandle_t *) &Start_Task_Handle ); //任务句柄
vTaskStartScheduler(); //开启任务调度
}
//开始任务任务函数
void Start_Task( void * pvParameters )
{
//创建任务1
xTaskCreate( (TaskFunction_t) Task1_LED0, //任务函数名
(const char* ) "Task1_LED0", //任务名称
(uint16_t ) Task1_Stack_Size, //任务堆栈大小
(void * ) NULL, //传递给任务函数的参数
(UBaseType_t ) Task1_Prio, //任务优先级
(TaskHandle_t *) &Task1_Handle ); //任务句柄
//创建任务2
xTaskCreate( (TaskFunction_t) Task2_LED1, //任务函数名
(const char* ) "Task2_LED1", //任务名称
(uint16_t ) Task2_Stack_Size, //任务堆栈大小
(void * ) NULL, //传递给任务函数的参数
(UBaseType_t ) Task2_Prio, //任务优先级
(TaskHandle_t *) &Task2_Handle ); //任务句柄
vTaskDelete(Start_Task_Handle); //删除开始任务
taskEXIT_CRITICAL(); //退出临界区
}
//任务1任务函数
void Task1_LED0( void * pvParameters )
{
u8 count = 0;
while(1)
{
count++;
printf("任务1执行了%d次\r\n", count);
if(count == 5)
{
printf("任务1被删除了!\r\n");
vTaskDelete(Task1_Handle); //删除任务1
//printf("任务1被删除了!\r\n");
}
LED0 = !LED0;
vTaskDelay(500);
}
}
//任务2任务函数
void Task2_LED1( void * pvParameters )
{
u16 count = 0;
while(1)
{
count++;
printf("任务2执行了%d次\r\n", count);
LED1 = 0;
vTaskDelay(300);
LED1 = 1;
vTaskDelay(800);
}
}