(学习日记)2024.03.16:UCOSIII第十八节:任务的删除

写在前面:
由于时间的不足与学习的碎片化,写博客变得有些奢侈。
但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。
既然如此
不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录,记录笔者认为最通俗、最有帮助的资料,并尽量总结几句话指明本质,以便于日后搜索起来更加容易。


标题的结构如下:“类型”:“知识点”——“简短的解释”
部分内容由于保密协议无法上传。


点击此处进入学习日记的总目录

2024.03.16

  • 三十二、UCOSIII:任务的删除
    • 1、实现任务删除
    • 2、main()函数

三十二、UCOSIII:任务的删除

1、实现任务删除

任务删除函数OSTaskDel()函数用于删除一个指定的任务,也可以删除自身,在os_task.c中定义

#if OS_CFG_TASK_DEL_EN > 0u			//(1)
void  OSTaskDel (OS_TCB  *p_tcb,
                OS_ERR  *p_err)
{
    CPU_SR_ALLOC();

    /* 不允许删除空闲任务 */			//(2)
    if (p_tcb == &OSIdleTaskTCB)
    {
        *p_err = OS_ERR_TASK_DEL_IDLE;
         return;
    }

    /* 删除自己 */
    if (p_tcb == (OS_TCB *)0) 			//(3)
    {
        CPU_CRITICAL_ENTER();
        p_tcb  = OSTCBCurPtr;
        CPU_CRITICAL_EXIT();
    }

    OS_CRITICAL_ENTER();

    /* 根据任务的状态来决定删除的动作 */
    switch (p_tcb->TaskState)
    {
        case OS_TASK_STATE_RDY:			//(4)
        OS_RdyListRemove(p_tcb);
        break;

        case OS_TASK_STATE_SUSPENDED:			//(5)
        break;

        /* 任务只是在延时,并没有在任何等待列表*/
        case OS_TASK_STATE_DLY:			//(6)
        case OS_TASK_STATE_DLY_SUSPENDED:
                OS_TickListRemove(p_tcb);
        break;

        case OS_TASK_STATE_PEND:			//(7)
        case OS_TASK_STATE_PEND_SUSPENDED:
        case OS_TASK_STATE_PEND_TIMEOUT:
        case OS_TASK_STATE_PEND_TIMEOUT_SUSPENDED:
                OS_TickListRemove(p_tcb);

#if 0/* 目前我们还没有实现等待列表,暂时先把这部分代码注释 */
    /* 看看在等待什么 */
    switch (p_tcb->PendOn) {
        case OS_TASK_PEND_ON_NOTHING:
        /* 任务信号量和队列没有等待队列,直接退出 */
        case OS_TASK_PEND_ON_TASK_Q:
        case OS_TASK_PEND_ON_TASK_SEM:
        break;

        /* 从等待列表移除 */
        case OS_TASK_PEND_ON_FLAG:
        case OS_TASK_PEND_ON_MULTI:
        case OS_TASK_PEND_ON_MUTEX:
        case OS_TASK_PEND_ON_Q:
        case OS_TASK_PEND_ON_SEM:
                    OS_PendListRemove(p_tcb);
        break;

        default:
        break;
                }
        break;
        #endif
        default:
                OS_CRITICAL_EXIT();
                *p_err = OS_ERR_STATE_INVALID;
        return;
    }

    /* 初始化TCB为默认值 */
    OS_TaskInitTCB(p_tcb);			//(8)
    /* 修改任务的状态为删除态,即处于休眠 */
    p_tcb->TaskState = (OS_STATE)OS_TASK_STATE_DEL;			//(9)

    OS_CRITICAL_EXIT_NO_SCHED();
    /* 任务切换,寻找最高优先级的任务 */
    OSSched();(10)

    *p_err = OS_ERR_NONE;
}
#endif/* OS_CFG_TASK_DEL_EN > 0u */
  • (1):任务删除是一个可选功能,由OS_CFG_TASK_DEL_EN控制,该宏在os_cfg.h中定义。
  • (2):空闲任务不能被删除。系统必须至少有一个任务在运行,当没有其他用户任务运行的时候,系统就会运行空闲任务。
  • (3):删除自己。
  • (4):任务只在就绪态,则从就绪列表移除。
  • (5):任务只是被挂起,则退出返回,不用做什么。
  • (6):任务在延时或者是延时加挂起,则从时基列表移除。
  • (7):任务在多种状态,但只要有一种是等待状态,就需要从等待列表移除。如果任务等待是任务自身的信号量和消息, 则直接退出返回,因为任务信号量和消息是没有等待列表的。等待列表我们暂时还没实现,所以暂时将等待部分相关的代码用条件编译屏蔽掉。
  • (8):初始化TCB为默认值。
  • (9):修改任务的状态为删除态,即处于休眠。
  • (10):任务调度,寻找优先级最高的任务来运行。

2、main()函数

本章main()函数没有添加新的测试代码,只需理解章节内容即可。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构奇妙旅程之红黑树

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

SpringBoot集成Jasypt实现敏感信息加密

项目场景: 在服务中不可避免的需要使用到一些秘钥(数据库、redis等)开发和测试环境还好,但生产如果采用明文配置将会有安全问题,jasypt是一个通用的加解密库,可以使用它。 在Spring Boot中使用Jasypt加密和…

nfs介绍与配置

NFS 1. nfs简介 nfs特点 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服…

CTF题型 SSTI(2) Flask-SSTI典型题巩固

CTF题型 SSTI(2) Flask-SSTI典型题巩固 文章目录 CTF题型 SSTI(2) Flask-SSTI典型题巩固前记1.klf__sstiSSTI_Fuzz字典(网上收集自己补充) 2.klf_2数字问题如何解决了?|count |length都被禁? 3.klf_3 前记 从基础到自己构造paylo…

【代码】YOLOv8标注信息验证

此代码的功能是标注信息验证,将原图和YOLOv8标注文件(txt)放在同一个文件夹中,作为输入文件夹 程序将标注的信息还原到原图中,并将原图和标注后的图像一同保存,以便查看 两个draw_labels函数,分…

Flutter 事件传递简单概述、事件冒泡、事件穿透

前言 当前案例 Flutter SDK版本:3.13.2 本文主要讲解,事件传递过程中可能遇到的问题解决,比如 事件冒泡、事件穿透; 事件穿透应用场景:在叠加布局中,两个组件是位置相同,相互覆盖&#xff0c…

第十三届蓝桥杯(C/C++ 大学B组)

目录 试题 A: 九进制转十进制 试题 B: 顺子日期 试题 C: 刷题统计 试题 D: 修剪灌木 试题 E: X 进制减法 试题 F: 统计子矩阵 试题 G: 积木画 试题 H: 扫雷 试题 I: 李白打酒加强版 试题 J: 砍竹子 试题 A: 九进制转十进制 九进制正整数 ( 2022 )转换成十进制等于多…

easyexcel读和写excel

请直接看原文: JAVA使用easyexcel操作Excel-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 之前写过一篇《JAVA操作Excel》,介绍了jxl和poi读写Excel的实现&am…

gitlab仓库使用流程(开发)

1.1.GitLab代码提交流程: 1.1.1准备阶段: 确保已经安装了Git,并且配置了正确的用户名和邮箱地址。 在本地创建一个新的文件夹,用于存放即将开发的代码。 1.1.2.拉取代码: 使用git clone命令从GitLab上拉取项目代码…

jQuery 常用API

一、jQuery 选择器 1.1 jQuery 基础选择器 原生 JS 获取元素方式很多,很杂,而且兼容性情况不一致,因此 jQuery 给我们做了封装,使获取元素统一标准。 1.2 jQuery 层级选择器 jQuery 设置样式 1.3 隐式迭代(重要&…

【图解物联网】第2章 物联网的架构

2.1 物联网的整体结构 实现物联网时,物联网服务大体上发挥着两个作用。 第一是把从设备收到的数据保存到数据库,并对采集的数据进行分析。 第二是向设备发送指令和信息。 本章将会为大家介绍如何构建物联网服务,以…

AMRT 3D 数字孪生引擎(轻量化图形引擎、GIS/BIM/3D融合引擎):智慧城市、智慧工厂、智慧建筑、智慧校园。。。

AMRT3D 一、概述 1、提供强大完整的工具链 AMRT3D包含开发引擎、资源管理、场景编辑、UI搭建、项目预览和发布等项目开发所需的全套功能,并整合了动画路径、精准测量、动态天气、视角切换和动画特效等工具。 2、轻量化技术应用与个性化定制 AMRT3D适用于快速开…

电子科技大学链时代工作室招新题C语言部分---题号G

1. 题目 问题的第一段也是非常逆天,说实话,你编不出问题背景可以不编。 这道题的大概意思就是, Pia要去坐飞机,那么行李就有限重。这时Pia想到自己带了个硬盘,众所周知,硬盘上存储的数据就是0和1的二进制序…

精密星历解析

总结一下用到的精密星历,区分一下: 精密星历与广播星历比较 1、精密星历比广播星历精度高,这一点大家都知道; 2、精密星历中给出的卫星的位置,是卫星质心,广播星历解算的是卫星的天线相位中心。 精密星历…

CTF题型 php反序列化进阶(1) php原生类 例题和总结

CTF题型 php反序列化进阶(1) php原生文件操作类 例题和总结 文章目录 CTF题型 php反序列化进阶(1) php原生文件操作类 例题和总结特征原理 我们可以通过PHP自身本来就有的类来进行文件操作扫描目录的三个类DirectoryIterator(支持glob://协议)FilesystemIterator(继…

接口测试基础+requests库

接口测试基础requests库 接口测试基础URL格式协议IP地址端⼝号资源路径查询参数 练习HTTP请求请求行请求头请求体浏览者开发工具 Requests库Requests库安装和简介设置http请求语法应用案例py02_tpshop_search.pypy03_tpshop_login.pypy04_ihrm_login.py 接口测试基础 URL格式 …

【JAVA快速编写UI】 Java 编写一个编码转换和加解密工具,可以创建一个简单的 GUI 应用程序(例子)

EncodingDecodingTool/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── rockmelodies/ │ │ │ └── encodingdecodingtool/ │ │ │ ├── MainApp.java │ │ │ …

力扣大厂热门面试算法题 43-45

43. 字符串相乘,44. 通配符匹配,45. 跳跃游戏 II,每题做详细思路梳理,配套Python&Java双语代码, 2024.03.18 可通过leetcode所有测试用例。 目录 43. 字符串相乘 解题思路 完整代码 Python Java 44. 通配符…

企企通:AI技术赋能供应链智能化升级,打造数字产业集群

2024年全国两会期间,政府工作报告中首次提出开展“人工智能”行动,深化大数据、人工智能等技术的研发应用,打造具有国际竞争力的数字产业集群。 图源:中国政府网 近年来,人工智能发展呈现加速态势,技术迭代…

基于java的宠物信息交流平台设计(含源文件)

随着世界经济信息化、全球化的到来和互联网的飞速发展,推动了各行业的改革。若想达到安全,快捷的目的,就需要拥有信息化的组织和管理模式,建立一套合理、动态的、交互友好的、高效的“多鱼”旧物交易平台。当前的信息管理存在工作…
最新文章