当前位置: 首页 > news >正文

FreeRTOS任务通知 | FreeRTOS十二

目录

说明:

一、任务通知

1.1、什么是任务通知

1.2、任务通知优势与劣势

1.3、任务通知值的更新方式

1.4、任务通知值状态

1.5、任务通知状态

1.6、任务通知方式类型

二、任务通知相关API函数

2.1、常用的发送通知API函数

2.2、带通知值的发送通知函数

2.3、常用的接收通知API函数

2.4、ulTaskGenericNotifyTake函数

2.5、xTaskGenericNotifyWait函数

2.6、最佳使用场合


说明:

关于内容:

    1)以下内容多为概念了解与步骤分析

    2)暂无个人示例代码,使用的是FreeRTOS的官方示例代码

    3)若想移植代码测试的,请移步其它地方寻找,下文内容暂无个人示例代码供测试

关于其它:

    1)操作系统:win 10

    2)平台:keil 5 mdk

    3)语言:c语言

    4)板子:STM32系列移植FreeRTOS
 

一、任务通知

1.1、什么是任务通知

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

1.2、任务通知优势与劣势

优势:

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

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

劣势:

        1)无法发送数据给ISR(中断),ISR没有结构体(通过结构体成员ulNotifiedValue),所以无法给ISR发送数据。但ISR可以使用任务通知,给任务发送数据;

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

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

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

1.3、任务通知值的更新方式

        1)不覆盖接受任务的通知值;

        2)覆盖接受任务的通知值;

        3)更新接受任务通知值的一个或多个bit;

        4)增加接受任务的通知值。

类型如下:

        1)计数值(数值累计,类型信号量)

        2)对应位,置一(类似事件标志组)

        3)任意数值(支持覆写或不覆写,类似队列)

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

1.4、任务通知值状态

任务都有一个结构体:任务控制块TCB,存在两个结构体成员变量,如下图1:

图1

注意:uint32_t类型,用来表示通知值;uint8_t类型,用来表示通知状态;
 

1.5、任务通知状态

任务通知状态有3种取值,如下图2:

图2

 名称,任务未等待通知,含义:任务通知默认的初始化状态

 名称,等待通知,含义:接收方已准备好(此时已调用接收任务通知函数),等待发送方给通知

 名称,等待接收,含义:发送方已发送(此时已调用发送任务通知函数),等待接收方接收

1.6、任务通知方式类型

代码实现:

typedef enum
{
    eNoAction = 0,            /* Notify the task without updating its notify value. */
    eSetBits,                 /* Set bits in the task's notification value. */
    eIncrement,               /* Increment the task's notification value. */
    eSetValueWithOverwrite,   /* Set the task's notification value to a specific value even if the previous value has not yet been read by the task. */
    eSetValueWithoutOverwrite /* Set the task's notification value if the previous value has been read by the task. */
} eNotifyAction;

参数含义:

名称,eNoAction ,含义:无操作

名称,eSetBits,含义:更新指定位

名称,eIncrement,含义:通知值+1

名称,eSetValueWithOverwrite,含义:覆写方式更新通知值

名称,eSetValueWithoutOverwrite ,含义:不覆写方式更新通知值

二、任务通知相关API函数

2.1、常用的发送通知API函数

如下图4:

 图4

2.2、带通知值的发送通知函数

代码实现:

BaseType_t xTaskGenericNotify( TaskHandle_t xTaskToNotify,
                               UBaseType_t uxIndexToNotify,
                               uint32_t ulValue,
                               eNotifyAction eAction,
                               uint32_t * pulPreviousNotificationValue ) PRIVILEGED_FUNCTION;

参数含义:

名称,xTaskToNotify,含义:接收任务通知的任务句柄

名称,uxIndexToNotify,含义:任务的指定通知

名称,ulValue,含义:任务通知值

名称,eAction,含义:通知方式(通知值关系方式)

名称,pulPreviousNotificationValue ,含义:用于保存更新前的任务通知值(NULL不保存)

2.3、常用的接收通知API函数

函数名称:ulTaskNotifyTask()

作用:获取任务通知,可以设置在退出此函数时将任务通知值清零或-1;当任务通知用作二值信号量或计数信号量时,使用此函数获取信号量。

函数名称:xTaskNotifyWait()

作用:获取任务通知,比ulTaskNotifyTask更复杂,可获取通知值和清除通知值的指定位。

2.4、ulTaskGenericNotifyTake函数

代码实现:

#define ulTaskNotifyTake( xClearCountOnExit, xTicksToWait ) \
    ulTaskGenericNotifyTake( ( tskDEFAULT_INDEX_TO_NOTIFY ), ( xClearCountOnExit ), ( xTicksToWait ) )

参数含义:

名称,tskDEFAULT_INDEX_TO_NOTIFY ,含义:任务的指定通知

名称,xClearCountOnExit ,含义:指定任务在成功接收通知后,将通知值清零或-1;pdTRUE-->把通知值清零,pdFALSE-->把通知值-1

名称,xTicksToWait ,含义:阻塞等待任务通知值的最大时间

返回值含义:

返回,0,含义:接收失败

返回,非0,含义:接收成功,返回任务通知的通知值

2.5、xTaskGenericNotifyWait函数

代码实现:

#define xTaskNotifyWait( ulBitsToClearOnEntry, ulBitsToClearOnExit, pulNotificationValue, xTicksToWait ) \
    xTaskGenericNotifyWait( tskDEFAULT_INDEX_TO_NOTIFY, ( ulBitsToClearOnEntry ), ( ulBitsToClearOnExit ), ( pulNotificationValue ), ( xTicksToWait ) )

参数含义:

名称,tskDEFAULT_INDEX_TO_NOTIFY,含义:任务的指定通知

名称,ulBitsToClearOnEntry ,含义:等待清零指定任务通知的比特位

名称,ulBitsToClearOnExit ,含义:成功等待后清零指定的任务通知值比特位

名称,pulNotificationValue ,含义:用来取出通知值(不使用设为NULL)

名称,xTicksToWait ,含义:阻塞等待任务通知值的最大时间

返回值含义:

返回,pdTRUE,含义:等待任务通知成功

返回,pdFALSE,含义:等待任务通知失败

注意:此函数用于获取通知值和清除通知值的指定位值,适用于模拟队列和事件标志组,使用该函数来获取任务。

2.6、最佳使用场合

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

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

相关文章:

FreeRTOS任务通知 | FreeRTOS十二

目录 说明: 一、任务通知 1.1、什么是任务通知 1.2、任务通知优势与劣势 1.3、任务通知值的更新方式 1.4、任务通知值状态 1.5、任务通知状态 1.6、任务通知方式类型 二、任务通知相关API函数 2.1、常用的发送通知API函数 2.2、带通知值的发送通知函数 …...

CentOS搭建博客typecho

Ubuntu搭建博客typecho_Dyansts的博客-CSDN博客 见过这样的文章展示页面吗? 详细视频安装教程: 9分钟快速搭建typecho博客,让你不再烦恼_哔哩哔哩_bilibili 现在就把他搭建出来 展示页面:Hello World 其他的插件:…...

湖南中创教育PMP如何实施风险应对,避免产生投诉

一、评估风险 评估风险影响的直接或间接价值 面临的潜在威胁,威胁发生的可能性有多大? 威胁一旦发生,损失是多大? 评估承受风险的能力 采取怎样的措施才能将损失降到最低,甚至为零 二、规划风险 对识别出来的风险进行分组或分类 确定…...

Urho3D子系统

通过使用函数RegisterSubsystem(),任何对象都可以作为子系统注册到上下文中。然后,通过调用GetSubsystem(),同一上下文中的任何其他对象都可以访问它们。每个对象类型只能有一个实例作为子系统存在。 发动机初始化后,以下子系统将…...

无线网络术语总结

学习802.11协议,其中有一些英文缩略词,这里做一下总结与记录。 学习资料:知乎徐方鑫 802.11相关文章 802.11协议精读3:CSMA/CD与CSMA/CA - 知乎 (zhihu.com) 无线网络术语缩写全称中文含义APAccessPoint无线访问节点用于无线网络…...

海卡和海派有什么区别

一、海卡和海派有什么区别 海派和海卡实际上就是快船和慢船的区别。都是头程选用海运的方式,海派是到海港海关清关拆柜后,尾程配送是采用快递配送。而海卡则是到海港海关清关拆柜后,尾程选用货车配送。1、海派比较适用于小件货物 海派是海运抵…...

vue3学习资料整理

一、一个后端程序员为什么要学习前端? 1.网上找到的学习理由 《Java后端的我也要学Node.js 了》 https://blog.csdn.net/yusimiao/article/details/104689007 《nodejs后端开发的优缺点(nodejs的概念与特征详解)》 https://www.1pindao.co…...

Linux基础语法进阶版

Linux基础语法 查看文件内容指令 touch 主要是修改文件时间,多用创建文件 -a #只更改访问时间 -m #只更改修改时间 -c --no-create#不创建任何文件cat 展示小文件内容 -b #对于非空输出行编号 -n #对于所有行输出编号 -E #在每行结束处显示"$" -A #展示所…...

近红外染料标记小分子1628790-37-3,Cyanine5.5 alkyne,花青素CY5.5炔基

试剂基团反应特点:Cyanine5.5 alkyne用于点击化学标记的远红外/近红外染料炔烃。氰基5.5是Cy5.5的类似物,一种流行的荧光团,已广泛用于各种应用,包括完整生物体成像。在温和的铜催化化学条件下,该试剂可与叠氮基共轭&a…...

洛谷——P1004 方格取数

【题目描述】 设有 NN 的方格图 (N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 0。如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0…...

Linux删除软链接

不防大家试试 unlink 命令 首先我们先来创建一个文件 #mkdir test_chk #touch test_chk/test.txt #vim test_chk/test.txt (这一步随便在这个test.txt里写点东东即可) 下面我们来创建test_chk目录 的软链接 #ln-s test_chk test_chk_ln 软链接创建好了,我们来…...

【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介绍

用于大型Transformer的8-bit矩阵乘法介绍原文地址:A Gentle Introduction to 8-bit Matrix Multiplication for transformers at scale using transformers, accelerate and bitsandbytes 相关博客 【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介…...

设计模式之工厂模式详解和应用

目录1 工厂模式的历史由来2.简单工厂模式2.1 简单工厂模式定义2.2 简单工厂模式案例2.3 简单工厂模式相关源码2.4 简单工厂模式优缺点3 工厂方法模式3.1 工厂方法模式定义3.2 工厂方法模式案例3.3 工厂方法模式源码3.4 工厂方法模式优缺点4 抽象工厂模式4.1 抽象工厂模式定义4.…...

ArcGIS中的附件功能

从ArcGIS10起,空间数据库增加了"附件"的功能,可灵活管理与要素相关的附加信息,可以是图像、PDF、文本文档或任意其他文件类型。例如,如果用某个要素表示建筑物,则可以使用附件来添加多张从不同角度拍摄的建筑物照片。 启动附件功能 要想使用附件功能,要素类必…...

epoll单台设备支持百万并发连接

一些概念: linux下一切接文件,文件描述符fd,文件I/O(包含socket,文本文件等),I/O多路复用,reactor模型,水平触发,边沿触发,多线程模型,阻塞和非阻塞&#xf…...

网络字节序

文章目录网络字节序网络字节序 内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分, 网络数据流同样有大端小端之分. 网络数据流的地址统一按大端处理 发送主机通常将发送缓冲区中的数据按内存地址从低到高的…...

03- SVC 支持向量机做人脸识别 (项目三)

数据集描述: sklearn的lfw_people函数在线下载55个外国人图片文件夹数据集来精确实现人脸识别并提取人脸特征向量数据集地址: sklearn.datasets.fetch_lfw_people — scikit-learn 1.2.1 documentationPCA降维: pca PCA(n_components0.9) 数据拆分: X_train, X_test, y_tra…...

浅谈指向二维数组元素的指针变量

(1)指向数组元素的指针变量 例1.有一个3X4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值. 编写程序 1 #include <stdio.h>2 int main()3 {4 int a[3][4] { 1,3,5,7,9,11,13,15,17,19,21,23 };5 int *p;6 for (p a[0]; p < a[0] 12; p) …...

左右值引用和移动语义

文章首发公众号&#xff1a;iDoitnow 1. 左右值和左右值引用 什么是左值、右值呢&#xff1f;一种极不严谨的理解为&#xff1a;在赋值的时候&#xff0c;能够被放到等号左边的值为左值&#xff0c;放在右边的值为右值。例如&#xff1a; int sum(int x, int y){return x y;…...

一起学习用Verilog在FPGA上实现CNN----(七)全连接层设计

1 全连接层设计 1.1 Layer 进行线性计算的单元layer&#xff0c;原理图如图所示&#xff1a; 1.2 processingElement Layer中的线性计算单元processingElement&#xff0c;原理图如图所示&#xff1a; processingElement模块展开原理图&#xff0c;如图所示&#xff0c;包含…...

tomcat打debug断点调试

windows debug调试 jdk版本&#xff1a;1.8.0_181 tomcat版本&#xff1a;apache-tomcat-9.0.68.0 idea版本&#xff1a;2020.1 方法一 修改catalina.bat 在%CATALINA_HOME%\bin\catalina.bat中找到 set “JAVA_OPTS%JAVA_OPTS% -Djava.protocol.handler.pkgsorg.apache…...

如果持有互斥锁的线程没有解锁退出了,该如何处理?

文章目录如果持有互斥锁的线程没有解锁退出了&#xff0c;该如何处理&#xff1f;问题引入PTHREAD_MUTEX_ROBUST 和 pthread_mutex_consistent登场了结论&#xff1a;如果持有互斥锁的线程没有解锁退出了&#xff0c;该如何处理&#xff1f; 问题引入 看下面一段代码&#xf…...

信息论绪论

本专栏针包含信息论与编码的核心知识&#xff0c;按知识点组织&#xff0c;可作为教学或学习的参考。markdown版本已归档至【Github仓库&#xff1a;information-theory】&#xff0c;需要的朋友们自取。或者关注公众号【AIShareLab】&#xff0c;回复 信息论 也可获取。 文章目…...

Buffer Status Reporting(BSR)

欢迎关注同名微信公众号“modem协议笔记”。 以一个实网中的异常场景开始&#xff0c;大概流程是有UL data要发送&#xff0c;UE触发BSR->no UL grant->SR->no UL grant->trigger RACH->RACH fail->RLF->RRC reestablishment&#xff1a;简单描述就是UE触…...

代码随想录LeetCode | 单调栈问题

前沿&#xff1a;撰写博客的目的是为了再刷时回顾和进一步完善&#xff0c;其次才是以教为学&#xff0c;所以如果有些博客写的较简陋&#xff0c;是为了保持进度不得已而为之&#xff0c;还请大家多多见谅。 预&#xff1a;看到题目后的思路和实现的代码。 见&#xff1a;参考…...

C++之可调用对象、bind绑定器和function包装器

可调用对象在C中&#xff0c;可以像函数一样调用的有&#xff1a;普通函数、类的静态成员函数、仿函数、lambda函数、类的非静态成员函数、可被转换为函数的类的对象&#xff0c;统称可调用对象或函数对象。可调用对象有类型&#xff0c;可以用指针存储它们的地址&#xff0c;可…...

MongoDB--》文档查询的详细具体操作

目录 统计查询 分页列表查询 排序查询 正则的复杂条件查询 比较查询 包含查询 条件连接查询 统计查询 统计查询使用count()方法&#xff0c;其语法格式如下&#xff1a; db.collection.count(query,options) ParameterTypeDescriptionquerydocument查询选择条件optio…...

网络协议(六):网络层

网络协议系列文章 网络协议(一)&#xff1a;基本概念、计算机之间的连接方式 网络协议(二)&#xff1a;MAC地址、IP地址、子网掩码、子网和超网 网络协议(三)&#xff1a;路由器原理及数据包传输过程 网络协议(四)&#xff1a;网络分类、ISP、上网方式、公网私网、NAT 网络…...

热启动预示生态起航的Smart Finance,与深度赋能的SMART通证

2023年初加密市场的回暖&#xff0c;意味着各个赛道都将在新的一年里走向新的叙事。最近&#xff0c;我们看到GameFi赛道也在市场回暖的背景下&#xff0c;逐渐走出阴霾。从融资数据上看&#xff0c;1月获得融资的GameFi项目共12个&#xff0c;融资突破8000万美元&#xff0c;1…...

提分必练,中创教育PMP全真模拟题分享

湖南中创教育每日五题分享来啦&#xff0c;“日日行&#xff0c;不怕千万里&#xff1b;常常做&#xff0c;不怕千万事。”&#xff0c;每日五题我们练起来&#xff01; 1、在系统测试期间&#xff0c;按已识别原因的类型或类别记录了失败测试的数量。项目经理首先需要从最大故…...

一个大型网站建设得多少钱/seo新人培训班

转自&#xff1a;http://www.cnblogs.com/niexiaobo/p/4597958.html 当调用系统键盘输入时&#xff0c;预输入&#xff0c;会奔溃&#xff0c;当调用以下的方法时&#xff0c; - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range repl…...

做网站有哪些要求/企业培训有哪些方面

华为P30系列是华为在今年4月份推出的新品&#xff0c;凭借着超强的拍照能力以及天空之境配色广受喜爱。而在近日&#xff0c;LV为华为P30系列推出了专属手机壳&#xff0c;售价3050元&#xff0c;在官网和北京、上海的LV线下店开售。华为P30系列是华为在今年4月份推出的新品&am…...

dede网站后台打不开/企业关键词大全

request作用域单个请求之间 session作用域打开浏览器&#xff0c;关闭浏览器之间&#xff0c;浏览器相关&#xff0c;同一个用户访问网站的次数 application对象作用域&#xff1a;服务器启动&#xff0c;关闭之间&#xff0c;一个网站被不同用户访问的次数 pageContext作用域&…...

南京网站建设开发公司/百度关键词收录

词性标注 标注语料库&#xff1b; 各词性标注及其含义 自动标注器&#xff1b; 默认标注器&#xff1b;正则表达式标注器&#xff1b;查询标注器&#xff1b; N-gram标注器&#xff1b; 一元标注器&#xff1b;分离训练和测试数据&#xff1b;一般的N-gram的标注&#xff1…...

校园网站集群建设/信息推广平台

重要声明:本文出自公众号:《管理的常识》"知乎7万赞回答&#xff1a;你思考问题的方式&#xff0c;决定了你的层次"一文。本人觉得写得蛮好&#xff0c;分享给大家&#xff0c;共勉&#xff01;文章有点长&#xff0c;看完全文需要点耐心…… 所谓厉害的人&#xff0…...

哪个网站做h5最好/广州疫情最新情况

TensorFlow ServingApache MXNet Model ServerNVIDIA TensorRTPyTorch ServingONNX RuntimeFlutterTensorFlow.jsDeep Learning PlatformSeldonNeuromationTensorFlow LitePolyaxonKubeflowFiddlerOpenVINOH2O.aiPredictionIOMLflowB...