FreeRTOS(8)----任务通知

news2024/11/27 5:34:50

一,任务通知的简介

相对于之前的信号量,事件组等,所谓的任务通知核心就是一个32位的无符号整数和8位的通知状态

任务通知可以通过如下方法更新接收任务的通知值:
● 不覆盖接收任务的通知值 ( 如果上次发送给接收任务的通知还没被处理 )
● 覆盖接收任务的通知值。
● 更新接收任务通知值的一个或多个 bit
● 增加接收任务的通知值。
任务的三种通知状态
1.未等待通知状态:就是任务的初始状态
2.等待通知状态 :当调用 ulTaskNotifyTake() 函数并设置 ulClearCountOnExit 参数为 0 时,任务将进入等待通知状态。在此状态下,任务只需要等待通知状态变量的值由 0 变为 1,即有其他任务向该任务发送通知,就可以返回,并使用最后接收到的通知值作为函数返回值。 如果没有其他任务向该任务发送通知,则任务将一直处于等待状态,直到有其他任务向该任务发送通知或超时(如果设置了超时参数)。
3.等待接收通知状态:当调用 ulTaskNotifyTake() 函数并设置 ulClearCountOnExit 参数为 1 时,任务将进入等待接收通知状态。在此状态下,任务需要等待通知状态变量的值由 0 变为 1,即有其他任务向该任务发送通知,并且在接收到通知后,将通知状态变量清零。 与等待通知状态不同的是,在等待接收通知状态下,即使之前已经接收到通知并返回了通知值,任务下次再调用 ulTaskNotifyTake() 函数时仍然会被阻塞等待新的通知。
任务通知的几个注意点:
1.不可以将通知发送到中断中
2.通知不可以发送给多个任务
3.发送通知的任务不可以被阻塞
任务通知函数介绍:

 

1.xTaskNotify()

 功能:向指定的任务发送一个任务通知,并且带有通知值 也可以指定通知值的发送方式

参数:

xTaskToNotify:  任务句柄,指定发送给哪个任务

ulValue: 任务通知值

eAction: 任务通知的更新方法【是一个结构体】

 注意的是:eSetValueWithOverwrite 覆盖的是接受任务通知的任务,即使当前的任务的通知值上一次没有被读取,也还是会被覆盖 

2.xTaskNotifyFromISR()

这个是xTaskNotify()的中断版本,

 

 参数:

xTaskToNotify: 任务句柄,指定发送的任务

ulValue: 任务通知值

eAction: 任务通知的更新方法

pxHigherPriorityWoken: 是否要进行任务切换,pdTRUE----->推出的时候要进行任务的切换,当发送的任务通知导致比当前运行任务的更高优先级的任务被转为就绪态,就需要进行任务fan

3.xTaskNotifyAndQuery()

参数:

xTaskToNotify: 任务句柄,指定发送的任务

ulValue: 任务通知值

eAction: 任务通知的更新方法

pulPreviousNotificationValue: 保存更新前的任务通知值

注:当参数eAction为eSetValueWithOverwrite,当任务通知值没有更新成功【1.当接收通知的任务上一次的通知值没有被处理,则新接收的通知值就可能会更新失败2.频繁的发送任务通知,导致通知值被一直覆盖,则可能也会更新失败】

4.xTaskNotifyAndQueryFromISR()

 这是xTaskNotifyAndQuery()中断版本

还是相对于上面的参数多了一个退出切换任务的参数。

5.ulTaskNotifyTake()

 参数:

xClearCountOnExit: pdTRUE----->返回的任务通知值清零   pdFLASE----->返回的认为通知值减一

xTicksToWait: 阻塞时间

返回值:清零或者减一之前的任务通知值

优点:想对于之前的二值信号量以及计数信号量,这个是一种更轻量化的实现,因为信号量是基于内核实现的,但是这个任务通知就是在任务创建的时候,每个人就存在了,是基于任务栈和变量的,不需要任何的内核对象。

6.xTaskNotifyWait()

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

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

相关文章

MyBatisPlus总结(1.0)

MyBatis-Plus MyBatis-Plus介绍 MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生 特性 无侵入:只做增强不做改变,引入它不会对现有工程产生影…

为何波卡被称为Layer 0?

理解区块链的技术本质,将揭示加密货币运行轨迹的神秘面纱。了解这背后的原理,将为你带来全新的视角,让你对加密货币的奇妙世界充满无尽的好奇。 波卡是一个内部互连的区块链平台,被赋予技术堆栈元协议或Layer 0的定义&#xff0c…

Golang 基础案例集合:中文拼音转换、解析二维码、压缩 zip、执行定时任务

前言 曾经,因为不够注重基础吃了好多亏。总是很喜欢去看那些高大上的东西,却忽略了最基本的东西。然后会错误的以为自己懂的很多,但是其实是沙堆中筑高台,知道很多高大上的架构,但是基础的东西却不太了解。我觉得&…

PySpark实战指南:大数据处理与分析的终极指南【上进小菜猪大数据】

上进小菜猪,沈工大软件工程专业,爱好敲代码,持续输出干货。 大数据处理与分析是当今信息时代的核心任务之一。本文将介绍如何使用PySpark(Python的Spark API)进行大数据处理和分析的实战技术。我们将探讨PySpark的基本…

P2[1-2]STM32简介(stm32简介+ARM介绍+片上外设+命名规则+系统结构+引脚定义+启动配置+最小系统电路+实物图介绍)

1.1 stm32简介 解释:ARM是核心部分,程序的内核,加减乘除的计算,都是在ARM内完成。 智能车方向:循迹小车,读取光电传感器或者摄像头数据,驱动电机前进和转弯。 无人机:用STM32读取陀螺仪加速度计的姿态数据,根据控制算法控制电机的速度,从而保证飞机稳定飞行。 机…

maven的pom文件

maven项目中会有pom文件&#xff0c; 当新建项目时候&#xff0c; 需要添加我们需要的依赖包。所以整理了一份比较常用的依赖包的pom&#xff0c;方便以后新建项目或者添加依赖包时copy且快捷。不需要的依赖可以删掉&#xff0c;避免首次远程拉取失败和缩小项目打包大小。 <…

爆料,华为重回深圳,深圳第二个硅谷来了-龙华九龙山未来可期

房地产最重要的决定因素&#xff1a;科技等高附加值产业&#xff01;过去几年&#xff0c;发生的最大的变化就是——科技巨头对全球经济的影响力越来越大&#xff0c;中美之间的博弈&#xff0c;由贸易战升级为科技战&#xff0c;就是基于此原因。人工智能、电子信息技术产业、…

工程数值分析(散装/自食/非全)

1.蒙特卡洛 基本流程 蒙特卡洛模拟法基于随机抽样原理&#xff0c;通过生成大量的随机样本&#xff0c;从而对目标变量进行估计和分析。具体来说&#xff0c;蒙特卡洛模拟法的基本流程如下&#xff1a; 1.确定问题&#xff1a;首先需要明确要解决的问题是什么&#xff0c;以及需…

使用腾讯手游助手作为开发测试模拟器的方案---以及部分问题的解决方案

此文主要介绍使用第三方模拟器(这里使用腾讯手游助手)作为开发工具&#xff0c;此模拟器分为两个引擎&#xff0c;一个与其他模拟器一样基于virtualbox的标准引擎&#xff0c;不过优化不太好&#xff0c;一个是他们主推的aow引擎&#xff0c;此引擎。关于aow没有太多的技术资料…

计算机网络(数据链路层,复习自用)

数据链路层 数据链路层功能概述封装成帧与透明传输差错编码&#xff08;检错编码&#xff09;差错编码&#xff08;纠错编码&#xff09;流量控制与可靠传输机制停止-等待协议后退N帧协议&#xff08;GBN&#xff09;选择重传协议&#xff08;Selective Repeat&#xff09; 信道…

ChatGPT-4.5:AI技术的最新进展

✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页&#xff1a; 全栈弄潮儿的个人主页 &#x1f3d9;️ 个人社区&#xff0c;欢迎你的加入&#xff1a;全栈弄潮儿的个人社区 &#x1f4d9; 专栏地址&#xff1a;AI大模型 OpenAI最新发布的GPT-4&#xff0c;在聊天机器人…

Windows下IDEA创建Java WebApp的一些总结

在踩了无数坑之后&#xff0c;写一下小总结&#xff0c;帮助兄弟们少走弯路 环境准备 Java 这个不用多说&#xff0c;推荐在环境变量Env加入Java Home环境变量&#xff0c;方便后面设置idea 能用Ultimate版本最好&#xff0c;我这种穷B就用Community版本了Mysql 如果是压缩包…

JVM垃圾回收算法及Java引用

目录 Java垃圾回收算法 1.标记清除算法&#xff1a;Mark-Sweep 2.复制算法&#xff1a;copying 3. 标记整理算法&#xff1a;Mark-Compact 4.分代收集算法 5.新生代垃圾回收算法&#xff1a;复制算法 6.老年代&#xff1a;标记整理算法 7.分区收集算法 Java引用 1.Ja…

迪赛智慧数——其他图表(漏斗图):高考生和家长志愿填报困扰问题感知

效果图 高考前的紧张&#xff0c;等分数的忐忑&#xff0c;填志愿的纠结&#xff0c;录取前的煎熬&#xff0c;希望就在不远的前方。 志愿填报心有数&#xff0c;就业前景要关注。收集信息要先行&#xff0c;切莫匆匆抉择定。热门专业不追捧&#xff0c;选择院校不跟风。兴趣爱…

阿里云异构计算GPU、FPGA、EAIS云服务器详细介绍说明

阿里云阿里云异构计算主要包括GPU云服务器、FPGA云服务器和弹性加速计算实例EAIS&#xff0c;随着人工智能技术的发展&#xff0c;越来越多的AI计算都采用异构计算来实现性能加速&#xff0c;阿里云异构计算云服务研发了云端AI加速器&#xff0c;通过统一的框架同时支持了Tenso…

[Daimayuan] 模拟输出受限制的双端队列(C++,模拟)

给你一个输出受限的双端队列&#xff0c;限制输出的双端队列即可以从一端插入元素&#xff0c;弹出元素&#xff0c;但是另一端只可以插入不可以删除元素。即每次你可以执行以下三种操作的其中一种&#xff1a; 在左边压入一个字符在右边压入一个字符弹出最左边的字符 现在给你…

机器学习实战案例用户RFM模型分层(八)

每个产品和公司都需要做用户的精细化运营&#xff0c;它是实现用户价值最大化和企业效益最优化的利器。通过将用户进行分层&#xff1a;如高价值用户、潜在价值用户、新用户、流失用户等&#xff0c;针对不同群体制定个性化的营销策略和客户服务&#xff0c;进而促进业务的增长…

【Java|golang】2465. 不同的平均值数目

给你一个下标从 0 开始长度为 偶数 的整数数组 nums 。 只要 nums 不是 空数组&#xff0c;你就重复执行以下步骤&#xff1a; 找到 nums 中的最小值&#xff0c;并删除它。 找到 nums 中的最大值&#xff0c;并删除它。 计算删除两数的平均值。 两数 a 和 b 的 平均值 为 (a…

(转载)基于蚁群算法的二维路径规划(matlab实现)

1 理论基础 1.1 路径规划算法 路径规划算法是指在有障碍物的工作环境中寻找一条从起点到终点的、无碰撞地绕过所有障碍物的运动路径。路径规划算法较多&#xff0c;大体上可分为全局路径规划算法和局部路径规划算法两类。其中&#xff0c;全局路径规划方法包括位形空间法、广…

Android进阶之路 - 字体自适应

开发中有很多场景需要进行自适应适配&#xff0c;但是关于这种字体自适应&#xff0c;我也是为数不多的几次使用&#xff0c;同时也简单分析了下源码&#xff0c;希望我们都有收获 很多时候控件的宽度是有限的&#xff0c;而要实现比较好看的UI效果&#xff0c;常见的处理方式应…