(学习日记)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;#endifdefault: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.mzph.cn/news/753184.shtml

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

相关文章

下载JDK17版本详细教程(下载、安装、环境变量配置)

官网下载 Oracle 甲骨文中国 | 云应用和云平台 安装 更改自己的安装位置。点击下一步,记住自己的安装位置 环境配置 右键此电脑点击属性---高级系统设置----环境变量 在系统变量里面点击新建环境变量JAVA_HOME,下面填入自己的jdk安装地址&#xff0c…

关于微服务跨数据库联合查询的一些解决思路

微服务架构的一个非常明显的特征就是一个服务所拥有的数据只能通过这个服务的API来访问。通过这种方式来解耦,这样就会带来查询问题。以前通过join就可以满足要求,现在如果需要跨多个服务集成查询就会非常麻烦。 解决思路 下面提供几个思路仅供参考 表…

【鸿蒙HarmonyOS开发笔记】常用组件介绍篇 —— Toggle切换按钮组件

概述 Toggle为切换按钮组件,一般用于两种状态之间的切换,例如下图中的蓝牙开关。 参数 Toggle组件的参数定义如下 Toggle(options: { type: ToggleType, isOn?: boolean })● type type属性用于设置Toggle组件的类型,可通过ToggleType枚举…

python异常:pythonIOError异常python打开文件异常

1.python读取不存在的文件时,抛出异常 通过 open()方法以读“r”的方式打开一个 abc.txt 的文件(该文件不存在),执行 open()打开一个不存在的文件时会抛 IOError 异常,通过 Python 所提供的 try...except...语句来接收…

linux查看服务器登录成功和登录失败的命令

last 查看成功登录服务器的信息,包括ip,时间,登录用户,时长。lastb 查看登录服务器失败的信息。 last命令实例: 其他参数: -a:把从何处登入系统的主机名称或ip地址,显示在最后一行…

.rmallox勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言: 近年来,勒索病毒的威胁日益增加,其中一种名为.rmallox的勒索病毒备受关注。这种病毒通过加密文件并勒索赎金来威胁受害者。本文将介绍.rmallox勒索病毒的特点,以及如何恢复被其加密的数据文件,并提供预防措施&a…

Css提高——flex布局及其相关属性

目录: 1、传统布局与flex布局的区别 2、flex的布局原理 3、flex常见的父项属性 3.1、flex-direction :设置主轴的方向 3.2、justify-content 设置主轴上的子元素排列方式 3.3、flex-wrap 设置子元素是否换行 3.4、align-items 设置侧轴上的子元素排…

Linux:系统初始化,内核优化,性能优化(1)

我们安装好了一个服务器之后,一定要对他的系统,内核,性能一系列进行一个优化,否则当大并发的情况下很可能出现问题,我把要优化的东西直接罗列出来并介绍,后期可以直接编写一个脚本拿到服务器上直接用就行 …

在深圳,为什么硬件工程师的待遇还不如软件?

深圳触觉智能科技有限公司 硬件明明比软件更难,为何在国内… 硬件明明比软件更难,但硬件工程师待遇却不如软件工程师,硬件工程师常被忽视,被视为可轻易模仿的“配角”,默默付出却鲜获认可。比如八年以上的资深硬件工…

linux 内核升级-离线

离线升级 首先找到镜像网址:http://elrepo.org/tiki/Download 我选择了 https://mirrors.tuna.tsinghua.edu.cn/elrepo/kernel/el7/x86_64/RPMS/ 下载安装包 wget https://mirrors.tuna.tsinghua.edu.cn/elrepo/kernel/el7/x86_64/RPMS/elrepo-release-7.0-6.el7…

2024年普通人的创业机会在哪里?2024热门创业项目!2024普通人想翻身的风口行业!

创业千万别冲动,社区团购代理创业失败案例! 是不是一开始挺看好这个赛道,看别人做的风生水起,以为不难,真正开始做才发现不好做,没有先天优势,货源和客源从零开始积累,开始就是摸着石…

Java 世界破破烂烂,电音小猫缝缝补补

Java 世界破破烂烂,电音小猫缝缝补补 Java 通用代码生成器光 2.4.0 电音之王尝鲜版六正在研发,昨天发布了介绍视频,请见: https://www.bilibili.com/video/BV1yD421j7UP/ 电音之王尝鲜版六支持哑数据模式,支持枚举。…

uniapp APP 上传文件

/*** 上传文件*/uploadPhoneFile:function(callback,params {}) {let fileType [.pdf,.doc,.xlsx,.docx,.xls]// #ifdef APP-PLUSplus.io.chooseFile({title: 选择文件, filetypes: [doc, docx], // 允许的文件类型 multiple: false, // 是否允许多选 },(e)>{const tem…

软件测试面试200问,面试看这就够了。。。

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 Part1 1、你的测试职业发展是什么? 测试经验越多,测试能力越高。所以我…

学嵌入式真的很烧钱吗?

如果是走嵌入式单片机方向,这篇内容,很适合预算1000以下的,作为发育参考。 下面是我2011年的入行成本: 买了智能小车,还有51开发板,杂七杂八,可能一共不到1000。 一开始迷之自信了,买…

软件测试方法 -- 等价类边界值

测试用例的定义 测试用例是为了特定的目的而设计的一组测试输入、执行条件和预期的结果,以便测试是否满足某个特定需求。通过大量的测试用例来检验软件的运行效果,他是指导测试工作进行的依据。 下面我们介绍几种常用的黑盒测试方法 等价类划分法 定…

数据表示—二进制与十进制转换

1. 二进制转十进制 按照数据类型分为三种:无符号的二进制整数,有符号的二进制整数和小数二进制数。 1.1 无符号的二进制整数 计算技巧: 从二进制数的右边第一位起,从右往左,先用二进制位置上的数乘以2的相应位数的幂&…

ABS10-ASEMI开关电源专用ABS10

编辑:ll ABS10-ASEMI开关电源专用ABS10 型号:ABS10 品牌:ASEMI 封装:ABS-4 最大重复峰值反向电压:1000V 最大正向平均整流电流(Vdss):1A 功率(Pd):中小功率 芯片个数:4 引脚…

NetSuite多脚本性能研究

在项目中,随着复杂度的提升,客制脚本以及各类SuiteAPP的应用,导致某个对象上挂载的脚本大量增加,最终导致了性能问题。表现在保存单据时时间过长,严重影响人机界面的用户感受。基于此问题,我们开展了NetSui…