【FreeRTOS】FreeRTOS删除任务vTaskDelete()

news2025/1/10 17:08:18

使用说明:

任务中。小时 (任务句柄_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();

        }

    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21632.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CEAC 之《计算机应用助理工程师》1

👨‍💻个人主页:微微的猪食小窝 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 微微的猪食小窝 原创 收录于专栏 【CEAC证书】 1组合框有3种不同的类型,这3种类型是下拉式组合框、简单组合框、下拉式列表框&…

12. PyQt5实现多页面切换之QTabBar

PyQt5 QTabBar 类 QTabBar 类直接继承自 QWidget。该类提供了一个选项卡栏,该类仅提供了一个选项卡, 并没有为每个选项卡提供相应的页面,因此要使选项卡栏实际可用,需要自行为每个选项 卡设置需要显示的页面,可以通过 …

【k8s】6、pod详解

文章目录一、pod介绍1、pod的基础概念2、pod定义(资源清单)二、Pod中的容器配置1、基本配置2、镜像拉取(imagePullPolicy)3、启动命令(command)4、环境变量(env)5、端口设置&#xf…

应急响应-计划任务排查

计划任务排查 由于很多计算机都会自动加载“计划任务”,“计划任务”也是恶意病毒实现持久化驻留的一种常用手段,因此在应急响应事件排查时需要进行排查。通俗的讲会定期执行某些操作。 Windows计划任务排查 任务计划是Windows系统的一个预置实现某些…

【数据结构】二叉树的顺序存储结构 —— 堆

文章目录前言二叉树的顺序存储堆的概念和结构堆的实现结构的定义接口总览初始化销毁插入向上调整删除向下调整取堆顶数据计算堆大小判空打印堆完整代码Heap.hHeap.ctest.c结语前言 今天,我们开始二叉树的学习。本篇博客的内容为 介绍二叉树的顺序存储 和 堆的实现。…

【滤波跟踪】基于matlab不变扩展卡尔曼滤波器对装有惯性导航系统和全球定位系统IMU+GPS进行滤波跟踪【含Matlab源码 2232期】

⛄一、简介 针对室内定位中的非视距(Non-Line-of-Sight,NLOS)现象,提出一个新型算法进行识别,同时有效缓解其影响.主要通过超宽带(Ultra-Wideband,UWB)定位系统与惯性导航系统(Inertial Navigation System,INS&#x…

酒店管理系统的设计与实现

Word下载链接如下: https://download.csdn.net/download/yw1990128/87096359 一 设计背景 1.1 课题现状 随着国家社会经济水平的提升,各酒店的发展速度越来越快,入住人员也越来越多。酒店房间的管理要求也愈来愈大,所以很多酒店正…

45.Django模板

1.django模板配置 1.1 Django模板概述 作为一个Web框架,Django需要一种方便的方式来动态生成HTML。最常用的方法依赖于模板。模板包含所需HTML输出的静态部分以及描述如何插入动态内容的特殊语法。 ​ 对模板引擎的一般支持和Django模板语言的实现都存在于 djang…

Linux下的NFS服务(包含windows10下的nfs搭建)

目录 1.NFS服务介绍 2.Linux下搭建NFS服务 (1)下载NFS服务端 (2)新建一个共享文件 (3)修改NFS服务配置文件 (4)重新启动NFS服务 (5)显示查看共享的文件…

38、常用类之String类

1、基本介绍: String s5new String(byte[] b); (5)String实现了Serializable,说明String可以串行化,即可以网络传输 String实现了Comparable,说明String对象可以比较 (6&#xff0…

JavaScript基础(13)_原型、原型对象

上一章构造函数确实简化了多个对象创建的麻烦问题,但是:构造函数每创建一个实例,构造函数就会执行一次,将属性和方法添加到该对象,每个对象实例化后地址互不相同,即使它们的方法所实现的逻辑和功能一样&…

pytorch初学笔记(八):神经网络之卷积操作

目录 一、卷积操作 二、二维卷积操作 2.1 torch.nn.functional 2.2 conv2d方法介绍 2.2.1 使用该方法需要引入的参数 2.2.2 常用参数 2.2.3 关于对input和weight的shape详解 三、代码实战 3.1 练习要求 3.2 tensor的reshape操作 3.3 不同stride的对比 3.4 不同pad…

Docker面试

1. Docker和虚拟机的区别? 虚拟机Virtual Machine与容器化技术(代表Docker)都是虚拟化技术,两者的区别在于虚拟化的程度不同。 隔离性 由于vm对操作系统也进行了虚拟化,隔离的更加彻底。而Docker共享宿主机的操作系统…

数字化转型总体需求

基于“两型三化九力”对企业数字化的要求,以建设产品全生命周期管理平台为手段和途径,打通设计、工艺、制造及交付服务的全生命周期的数字线,实现数字化设计、数字化仿真、数字化制造、数字化服务及数字化管理,未来以此为基础实现…

【计算机毕业设计】11.毕业生信息管理系统+vue

一、系统截图(需要演示视频可以私聊) 摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 毕业生信息招聘平台,主要的模块包括查看管理员;首页、个…

zk常用命令ls、ls2、get、stat,参数意思(重补早期学习记录)

前言:补学习记录,几年前写一半丢草稿箱,突然看到,有强迫症所以补完 1.连接zk客户端(进入zk后台) ./zkCli.sh 连接成功 使用help查看有哪些命令可以使用 试试ls和ls2的区别 ls显示指定路径下的目录 ls2不仅可以 显示指定路径下的目录,还可以显示该节点的相关状态信息…

OpenGL 单色

目录 一.OpenGL 单色图 1.IOS Object-C 版本1.Windows OpenGL ES 版本2.Windows OpenGL 版本 二.OpenGL 单色 GLSL Shader三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >…

非关系型数据库MongoDB是什么/SpringBoot如何使用或整合MongoDB

写在前面: 继续记录自己的SpringBoot学习之旅,这次是SpringBoot应用相关知识学习记录。若看不懂则建议先看前几篇博客,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 3.4.3.3 Mongodb 3.4.3.3.1 介绍 MongoDB是一个开…

【Tomcat专题】Tomcat如何打破双亲委派机制?

文章目录类加载器双亲委派机制双亲委派的好处Tomcat的类加载器loadClass总体加载步骤:类加载器 三种JDK内部的类加载器 启动类加载器(BootStrap ClassLoader) 负责加载JRE\lib下的rt.jar、resources.jar、charsets.jar包中的class。 扩展…

一文带你搞懂sklearn.metrics混淆矩阵

一般的二分类任务需要的评价指标有4个 accuracyprecisionrecallf1-score 四个指标的计算公式如下 计算这些指标要涉及到下面这四个概念,而它们又构成了混淆矩阵 TP (True Positive)FP (False Positive)TN (True Negative)FN (False Negative) 混淆矩阵实际值01预测…