• 【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();

            }

        }

    }

  • 相关阅读:
    Servlet | HttpServletRequest接口、通过request接口获取请求参数
    2304. 网格中的最小路径代价 : 从「图论最短路」过渡到「O(1) 空间的原地模拟」
    网站建设关键程序和知识点相关介绍
    (十一)React Ant Design Pro + .Net5 WebApi:后端环境搭建-IdentityServer4(三)持久化
    在真实环境中测试,如何及时停损
    Vue实战篇三十三:实现新闻的浏览历史
    多线程常见面试题
    Microsoft Office Word 远程命令执行漏洞(CVE-2022-30190)分析与利用
    基于单片机体温脉搏检测控制系统及源程序
    CentOS 9 Stream 上安装 WebStorm
  • 原文地址:https://blog.csdn.net/qq_20017379/article/details/127954918