FreeRTOS——任务通知

一、任务通知

1.1 任务通知简介

任务通知:用来通知任务的,任务控制块中的结构体成员变量 ulNotifiedValue就是这个通知值

(1)使用队列、信号量、事件标志组时都需另外 创建一个结构体 ,通过中间的结构体进行间接通信

(2)使用任务通知时,任务结构体TCB中就包含了内部对象,可以直接接收别人发过来的"通知" 

 只要合理,灵活的利用任务通知的特点,可以在一些场合中替代队列、信号量、事件标志组

优点:

(1)效率高使用任务通知向任务发送事件或数据比使用队列、事件标志组或信号量快得多

(2)占用内存更小使用其他方法时都要先创建对应的结构体,使用任务通知时无需创建结构体

缺点:

(1)无法发送数据给中断ISR没有任务结构体,所以无法给ISR发送数据。但是ISR可以使用任务通知的功能,发数据给任务

(2)无法广播给多个任务任务通知只能是被指定的一个任务接收并处理(一对一

(3)无法缓存多个数据任务通知是通过更新任务通知值来发送数据的,任务结构体中只有一个任务通知值,只能保持一个数据

(4)发送受阻不支持阻塞发送方无法进入阻塞状态等待

1.2 任务通知值和通知状态

注:这两个成员变量均为数组

任务通知值:

任务通知状态:

 二、相关API

任务通知API函数主要有两类:①发送通知 ②接收通知

注意:发送通知API函数可以用于任务和中断服务函数中接收 通知API函数只能用在 任务中。

(1)发送通知函数

函数

描述

xTaskNotify()

发送通知,带有通知值

xTaskNotifyAndQuery()

发送通知,带有通知值并且保留接收任务的原通知值

xTaskNotifyGive()

发送通知,不带通知值,此函数会将接收任务的通知值加一,常用于信号量

xTaskNotifyFromISR()

在中断中发送任务通知

xTaskNotifyAndQueryFromISR()

vTaskNotifyGiveFromISR()

 注:uxIndexToNotify:任务通知相关数组的成员,实际上就是TCB中任务通知数组的第一个元素(下标为0)

(2)接收通知

函数

描述

ulTaskNotifyTake()

获取任务通知,可以设置在退出此函数的时候将任务通知值清零(模拟二值信号量)或者减一(模拟计数型信号量)

当任务通知用作二值信号量或者计数信号量的时候,使用此函数来获取信号量

xTaskNotifyWait()

获取任务通知,比 ulTaskNotifyTak()更为复杂,可获取通知值和清除通知值的指定位

 总结:

1. 当任务通知用作于信号量时,使用函数获取信号量:ulTaskNotifyTake()

2. 当任务通知用作于事件标志组或队列时,使用此函数来获取: xTaskNotifyWait()

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

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

相关文章

古代VS现代,太阳黑子的影响有什么变化?

公元前28年,我国汉朝人在人类历史上第一次记载下了“太阳黑子”。在《汉书五行志》里是这样记载:“汉成帝河平元年三月乙未,日出黄,有黑气,大如钱,居日中央”。在2052年前,人类对于太阳黑子的认…

社区6月月报 | Apache DolphinScheduler重要修复和优化记录

各位热爱Apache DolphinScheduler的小伙伴们,社区6月月报更新啦!这里将记录Apache DolphinScheduler社区每月的重要更新,欢迎关注。 月度Merge Stars 感谢以下小伙伴上个月为Apache DolphinScheduler所做的精彩贡献(排名不分先后…

跨境传输需要遵守哪些准则,如何做到有效管控?

在全球化的商业环境中,跨国企业面临着数据跨境传输的挑战。随着业务的扩展,企业需要在不同国家和地区之间高效、安全地传输大量数据。选择合适的跨境传输方案对于保障数据安全、提高业务效率、遵守法律法规至关重要。 跨境传输数据需要遵守的准则和规定主…

FPGA之 串口UART通信

FPGA之串口UART通信 1. UART发送模块(Transmitter)2. UART接收模块(Receiver)3. testbench4. 边沿检测电路 串口(Universal Asynchronous Receiver/Transmitter,UART)是一种串行通信协议&#x…

大数据下的用户研究:深度洞察与精准决策的引擎

文章目录 一、大数据时代的用户研究新机遇二、大数据用户研究的流程与关键技术三、大数据用户研究的实践案例四、大数据用户研究的挑战与展望《用户研究方法:卓越产品和服务的用户研究技巧》内容及特色读者对象 在当今这个数据爆炸的时代,大数据已成为推…

仪表板展示|DataEase看中国:2023年中国新能源汽车经济运行情况分析

背景介绍 随着政府机构、企业和个人对环保和可持续发展的高度关注,“新能源汽车”在全球范围内成为了一个热门话题。新能源汽车是指使用非传统燃料(如电能、氢能等)作为动力源的汽车。 在中国市场,新能源汽车产业蓬勃发展&#…

2.贪心算法.基础

2.贪心算法.基础 基础知识题目1.分发饼干2.摆动序列3.最大子序和4.买股票的最佳时机24.2.买股票的最佳时机5.跳跃游戏5.1.跳跃游戏26.K次取反后最大化的数组和7.加油站8.分发糖果 基础知识 什么是贪心? 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 贪…

Codeforces Round #956 (Div. 2) and ByteRace 2024(A~D题解)

这次比赛也是比较吃亏的,做题顺序出错了,先做的第三个,错在第三个数据点之后,才做的第二个(因为当时有个地方没检查出来)所以这次比赛还是一如既往地打拉了 那么就来发一下题解吧 A. Array Divisibility …

Nifi 与 Kettle

01 Kettle简介 Kettle是一个开源的ETL(Extract-Transform-Load)工具,可以用于数据集成、数据转换和数据处理等任务。它提供了一组可视化的设计工具,使得用户可以通过简单的拖拽和连接来构建数据流程,并且还支持多种数据…

apache启动报错:the requested operation has failed

Apache24\bin cmd 回车 httpd -t 因为我重新压缩了,记住,重新压缩要使用原路径, 因为你安装的 时候使用的是原路径 还是不行就改个端口,切记修改配置文件httpd.conf先把Tomcat停了 Define SRVROOT "F:\Apache\Apache24&q…

人工智能和机器学习 (复旦大学计算机科学与技术实践工作站)20240703(上午场)人工智能初步、mind+人脸识别

前言 在这个科技日新月异的时代,人工智能(AI)已经逐渐渗透到我们生活的方方面面,从智能家居到自动驾驶,无一不彰显着AI的强大潜力。而人脸识别技术作为AI领域的一项重要应用,更是以其高效、便捷的特点受到了…

什么是Kudu

Kudu是一个由Cloudera于2015年9月开源的分布式数据存储引擎,设计旨在结合Hadoop分布式文件系统(HDFS)和HBase的优势。Kudu提供了一种既支持高效随机访问又支持数据扫描的能力,适用于需要实时插入、更新和读取数据的场景&#xff0…

决策树算法简单介绍:原理和方案实施

决策树算法介绍:原理和方案实施 决策树(Decision Tree)是一种常用的机器学习算法,它既可以用于分类任务,也可以用于回归任务。由于其直观性和解释性,决策树在数据分析和模型构建中得到了广泛的应用。本文将…

python爬虫和用腾讯云API接口进行翻译并存入excel,通过本机的Windows任务计划程序定时运行Python脚本!

项目场景: 提示:这里简述项目相关背景:定时爬取外网的某个页面,并将需要的部分翻译为中文存入excel 接下了的,没学过的最好看一下 基本爬虫的学习 【爬虫】requests 结合 BeautifulSoup抓取网页数据_requests beauti…

科普文:Linux服务器常用命令和脚本

Linux服务器常用的命令:find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk;提供的例子和参数都是最常用和最为实用的。 1.find 文件查找 查找txt和pdf文件 find . \( -name "*.txt" -o -name "*.pdf" \) -print 正…

朋友圈发文黄金时段揭秘,一文搞懂私域运营秘诀

猫头虎 🐯 建联猫头虎,商务合作,产品评测,产品推广,个人自媒体创作,超级个体,涨粉秘籍,一起探索编程世界的无限可能! 掌握朋友圈最佳发文时间,提升互动率&a…

matlab仿真 信道(下)

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第四章内容,有兴趣的读者请阅读原书) 之前的内容还剩下simulink的仿真过程。 3.simulink中的AWGN模块仿真 系统框图如图所示,TX和RX 模块需要单独实现…

【C++ 】-vector:新时代动态数组的革新与未来

目录 1. vector的介绍及使用 1.1 vector的介绍 1.1.1 vector是什么 1.1.2 vector的存储机制 1.2 vector的使用 1.2.1 定义和构造函数 1.2.2 迭代器 1.2.3 容量相关操作 1.2.4 元素访问和修改 1.3 迭代器失效问题 2. vector深度剖析及模拟实现 2.1 std::vector的模拟…

新零售起盘案例「半藏酱酒」布局路径,半藏总院分院招商模式

在当前白酒市场中,一款名为半藏酒的酒品以其独特的新零售模式引起了广泛关注。这种模式不同于传统销售方式,通过多种创新玩法,实现了销售与品牌推广的双重目标,让我们一起来看看细节。 半藏酒的分级代理制度将代理商分为两个层级&…

DETR目标检测框架

概念:DETR(Detection Transformer)是一种基于Transformer架构的端到端目标检测框架。它与传统的基于区域提议的目标检测方法有所不同。传统方法通常依赖于手工设计的组件(如锚框、非极大值抑制等),而DETR将…