• 【FreeRTOS】FreeRTOS删除任务vTaskDelete()


    使用说明:

    任务中。小时 (任务句柄_t xTask); INCLUDE_vTaskDelete必须定义为1,才能使用此函数。有关更多信息,请参见RTOS配置文档。 从RTOS内核管理中删除任务。正在删除的任务将从所有就绪、阻止、暂停和事件列表中删除。 注:空闲任务负责从已删除的任务中释放RTOS内核分配的内存。因此,如果应用程序调用vTaskDelete(),则空闲任务不会缺少微控制器处理时间,这一点非常重要。任务代码分配的内存不会自动释放,应该在删除任务之前释放。 请参见应用程序文件死亡演示。c获取使用vTaskDelete()的示例代码。

    使用用途:

    一般是使用在初始化任务中,当初始化完成所有任务之后进行删除初始化任务,

    一般是删除自身任务或者是强制删除其他任务  

    条件:

    FreeRTOSConfig.h中定义

    #define INCLUDE_vTaskDelay 1

    函数使用:

    /**

     * @description: 初始化任务列表

     * @detail:

     * @return {*}

     * @author: lkc

     */

    void Task_InitList(void *pvParameters)

    {

        while (1)

        {

            printf("init task init success\n");

            /* 第一种。删除选中任务 */

            vTaskDelete(pxStartTaskHandle);

            /* 或者第二种,删除当前运行任务 */

            /* vTaskDelete(NULL); */

        }

    }

    函数源码解释:

    void vTaskDelete( TaskHandle_t xTaskToDelete )

    {

        TCB_t * pxTCB;

        /* 进入临界区 */

        taskENTER_CRITICAL();

        {

            /* 如果xTaskToDelete为空,那么调用该函数的任务将会被删除 */

            pxTCB = prvGetTCBFromHandle( xTaskToDelete );

            /* 将任务从就绪和延时列表删除 */

            if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )

            {

                taskRESET_READY_PRIORITY( pxTCB->uxPriority );

            }

            else

            {

                mtCOVERAGE_TEST_MARKER();

            }

            /* 判断是否任务在等待事件 */

            if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL )

            {

                ( void ) uxListRemove( &( pxTCB->xEventListItem ) );

            }

            else

            {

                mtCOVERAGE_TEST_MARKER();

            }

            /* 检测任务列表需要重新生成 */

            uxTaskNumber++;

            /* 如果是当前任务 */

            if( pxTCB == pxCurrentTCB )

            {

                /*  任务正在删除自己。这不能在任务本身,因为上下文切换到另一个任务是必需的。        将任务放入终止列表中。空闲任务将检查终止列表,释放任何内存分配被删除任务的TCB和堆栈的调度程序。*/

                vListInsertEnd( &xTasksWaitingTermination, &( pxTCB->xStateListItem ) );

                /* 增加ucTasksDeleted变量,以便空闲任务知道有一个任务被删除了,因此它应该被删除检查xtaskswaitingterminate列表 */

                ++uxDeletedTasksWaitingCleanUp;

                /* Call the delete hook before portPRE_TASK_DELETE_HOOK() as

                    * portPRE_TASK_DELETE_HOOK() does not return in the Win32 port. */

                traceTASK_DELETE( pxTCB );

                /* The pre-delete hook is primarily for the Windows simulator,

                    * in which Windows specific clean up operations are performed,

                    * after which it is not possible to yield away from this task -

                    * hence xYieldPending is used to latch that a context switch is

                    * required. */

                portPRE_TASK_DELETE_HOOK( pxTCB, &xYieldPending );

            }

            /* 如果非当前任务 */

            else

            {

                --uxCurrentNumberOfTasks;

                traceTASK_DELETE( pxTCB );

                prvDeleteTCB( pxTCB );

                /* Reset the next expected unblock time in case it referred to

                    * the task that has just been deleted. */

                prvResetNextTaskUnblockTime();

            }

        }

        taskEXIT_CRITICAL();

        /* 如果它是当前运行的任务,则强制重新调度 */

        if( xSchedulerRunning != pdFALSE )

        {

            if( pxTCB == pxCurrentTCB )

            {

                configASSERT( uxSchedulerSuspended == 0 );

                portYIELD_WITHIN_API();

            }

            else

            {

                mtCOVERAGE_TEST_MARKER();

            }

        }

    }

  • 相关阅读:
    IoU、GIoU、DIoU、CIoU、EIoU
    一级造价工程师(安装)- 计量笔记 - 第五章第三节工业管道工程
    基于Springboot+vue的玩具销售商城网站 elementui
    第1章 Java基础(三)
    ElementPlus·表单验证
    TypeScript学习笔记 | 泛型 - 泛型的应用 - 泛型工具类 - extends - infer用法
    Qt-快速展开/折叠所有代码段
    性能优于BERT的FLAIR:一篇文章入门Flair模型
    【SQL server】 表结构的约束和维护
    【历史上的今天】11 月 7 日:图灵奖女性得主诞生;Twitter 告别 140 字符时代;首位中国 AI 主播
  • 原文地址:https://blog.csdn.net/qq_20017379/article/details/127954918