目录
一、删除任务
1、创建句柄
在删除任务时,需要传入任务句柄
2、代码实现
创建任务句柄
TaskHandle_t oleddeal1handle;
TaskHandle_t oleddeal2handle;
创建任务
//任务优先级与任务删除
xTaskCreate(oled_deal1,"oleddeal_task1",128,&oled_info1,osPriorityNormal,&oleddeal1handle);
xTaskCreate(oled_deal2,"oleddeal_task2",128,&oled_info2,osPriorityNormal,&oleddeal2handle);
函数实现
void oled_deal1(void *param)
{
int num = 10;
for( ;; )
{
if(num == 20)
{
OLED_Clear();
vTaskDelete(oleddeal1handle);
}
OLED_ShowNum(0,0,num,3,16);
num++;
HAL_Delay(500);
}
}
void oled_deal2(void *param)
{
int num = 30;
for( ;; )
{
OLED_ShowNum(0,3,num,3,16);
num++;
HAL_Delay(500);
}
}
二、任务优先级
1、任务优先级介绍
优先级的取值范围是:0~(configMAX_PRIORITIES – 1),数值越大优先级越高。
- FreeRTOS会确保最高优先级的、可运行的任务,马上就能执行
- 对于相同优先级的、可运行的任务,轮流执行
如图有一下优先级
2、代码实现
修改上述代码提高任务1的优先级
//任务优先级与任务删除
xTaskCreate(oled_deal1,"oleddeal_task1",128,&oled_info1,osPriorityHigh1,&oleddeal1handle);
xTaskCreate(oled_deal2,"oleddeal_task2",128,&oled_info2,osPriorityNormal,&oleddeal2handle);
函数实现
void oled_deal1(void *param)
{
int num = 10;
for( ;; )
{
if(num == 20)
{
OLED_Clear();
vTaskDelete(oleddeal1handle);
}
OLED_ShowNum(0,0,num,3,16);
num++;
HAL_Delay(500);
}
}
void oled_deal2(void *param)
{
int num = 30;
for( ;; )
{
OLED_ShowNum(0,3,num,3,16);
num++;
HAL_Delay(500);
}
}