freeRTOS使用删除任务函数vTaskDelete()遇到的坑

一、vTaskDelete()的使用方法

在freeROTS中,函数原型如下:

void vTaskDelete( TaskHandle_t xTaskToDelete );

参数xTaskToDelete :传递的是任务句柄或者NULL。传递对应的任务句柄删除对应的函数,当传入的是NULL时,删除该函数所在的任务。

vTaskDelete()函数主要有三种使用场景:

第一个种:在当前任务中删除自己(自杀)

传递的参数为NULL。

第二种:在当前任务中删除其它任务(杀人)

传递的时要删除任务的句柄。

第三种:被其它任务删除(被杀)

vTaskDelete()函数在其它任务中使用,传递的是自己的句柄。

二、使用vTaskDelete( )遇到的坑

本人在学习时该函数是,使用当前任务删除别的任务时,发现执行vTaskDelete( )函数后,所有的任务均停止,而不是只停止被删除的函数。最后发现在使用vTaskDelete( )函数删除其它任务时,应该先任务的句柄进行判断。在freeROTS中,一个任务不能被删除两次,不然程序会跑飞。在删除任务后,也要手动将句柄赋值为NULL。下面是修改后的程序:

void task_1ms(void *param)
{
    while (1)
    {
#ifdef DEBUG
        (*g_debug)++;
        if(*g_debug > 10)
        {
            if(task_10ms_TaskHandle!=NULL)//不能删除两次,不然程序跑飞
            {
                vTaskDelete(task_10ms_TaskHandle);
                task_10ms_TaskHandle = NULL;//vTaskDelete(Htask) 执行后,Htask不会赋值为NULL,需要手动赋值
            }
        }
#endif // DEBUG
        LED_TIP(Tog);
        osDelay(1); // 阻塞
    }
}

参考链接第9章 任务管理 | 百问网

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值