19. FreeRTOS 直接任务通知当邮箱使用

FreeRTOS中任务通知作为邮箱的使用

引言

在嵌入式系统开发中,任务间的通信是非常重要的一部分。FreeRTOS提供了多种任务间通信的方式,如队列、信号量、事件标志组等。然而,这些通信方式可能会带来一些额外的开销。为了提供一种更高效的通信方式,FreeRTOS引入了任务通知功能。任务通知可以被用作轻量级的邮箱,提供了一种高效的任务间通信方式。

任务通知简介

任务通知是FreeRTOS提供的一种轻量级的任务间通信方式。每个任务都有一个与之关联的32位无符号整数,该整数就是任务通知的值。任务可以等待其任务通知的值被设置,也可以检查其任务通知的值是否已经被设置。

任务通知作为邮箱的使用

任务通知的值可以被用作邮箱的值。使用xTaskNotify()xTaskNotifyFromISR()函数可以将数据发送给任务。其中,函数的eAction参数可以设置为eSetValueWithOverwriteeSetValueWithoutOverwrite。如果eAction设置为eSetValueWithOverwrite,那么即使接收任务已经有一个通知待处理,接收任务的通知值也会被更新。如果eAction设置为eSetValueWithoutOverwrite,那么只有在接收任务没有待处理的通知时,接收任务的通知值才会被更新。

🚨需要注意xTaskNotifyFromISR()它可以在中断服务例程(ISR)中被调用,而xTaskNotify()函数不应该在中断服务例程(ISR)中被调用。这是因为xTaskNotify()可能会导致上下文切换。如果在ISR中调用xTaskNotify()并导致上下文切换,那么可能会出现未定义的行为。

相反,应该使用xTaskNotifyFromISR()函数在ISR中发送任务通知。xTaskNotifyFromISR()函数是专门为在ISR中使用而设计的,它可以安全地在ISR中调用,并且在返回到任务级别代码之前,会进行必要的上下文切换。

示例

在这个示例中,Task1每秒发送一次任务通知给Task2Task2则在接收到任务通知后,打印出通知的值。这就是如何使用FreeRTOS的任务通知作为邮箱的一个简单示例。

#include <Arduino.h>
#include <FreeRTOS.h>// 定义任务句柄
TaskHandle_t Task1;
TaskHandle_t Task2;void setup() {// 创建任务xTaskCreate(Task1code, "Task1", 10000, NULL, 1, &Task1);xTaskCreate(Task2code, "Task2", 10000, NULL, 1, &Task2);
}void loop() {// 空循环
}void Task1code(void * pvParameters) {for (;;) {// 使用任务通知发送数据xTaskNotify(Task2, 0x01, eSetValueWithOverwrite);vTaskDelay(pdMS_TO_TICKS(1000));}
}void Task2code(void * pvParameters) {uint32_t ulNotificationValue;for (;;) {// 等待接收任务通知if (xTaskNotifyWait(0x00, 0xFFFFFFFF, &ulNotificationValue, portMAX_DELAY) == pdTRUE) {// 当接收到任务通知时,处理数据Serial.println("接收到任务通知,值为:" + String(ulNotificationValue));}}
}

结论

总的来说,FreeRTOS的任务通知作为轻量级邮箱的使用,可以提供一种高效的任务间通信方式。但在使用时,需要考虑其局限性,以确保其适用于特定的应用场景。希望本文能够帮助你理解如何在FreeRTOS中使用任务通知作为邮箱,以及如何根据实际需求选择合适的任务间通信方式。

参考文献

FreeRTOS官方文档:任务通知

FreeRTOS官方文档:任务通知作为轻量级二值信号量

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

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

相关文章

C++ Thread多线程并发记录(8)生产者-消费者模型与信号量(条件变量)

一.生产者-消费者模型 生产者-消费者模型是一个十分经典的多线程并发协作模式。所谓的生产者-消费者&#xff0c;实际上包含了两类线程&#xff0c;一种是生产者线程用于生产数据&#xff0c;另一种是消费者线程用于消费数据&#xff0c;为了解耦生产者和消费者的关系&#xff…

Opencv 色彩空间

一 核心知识 色彩空间变换&#xff1b; 像素访问&#xff1b; 矩阵的、-、*、、&#xff1b; 基本图形的绘制 二 颜色空间 RGB&#xff1a;人眼的色彩空间&#xff1b; OpenCV默认使用BGR&#xff1b; HSV/HSB/HSL; YUV(视频); 1 RGB 2 BGR 图像的多种属性 1 访问图像(Ma…

人工智能大模型的进化之路:探索如何让它们变得更“聪明”

一、引言 在人工智能&#xff08;AI&#xff09;领域&#xff0c;大模型凭借其强大的处理能力和广泛的应用前景&#xff0c;已经成为研究的热点。然而&#xff0c;尽管这些模型在多个领域展现出了惊人的能力&#xff0c;但它们仍然面临着理解力、泛化能力和适应性等方面的挑战…

学习Java的日子 Day51 数据库,DDL,DML

Day51 MySQL 1.数据库 数据库&#xff08;database&#xff09;就是一个存储数据的仓库。为了方便数据的存储和管理&#xff0c;它将数据按照特定的规律存储在磁盘上。通过数据库管理系统&#xff0c;可以有效地组织和管理存储在数据库中的数据 MySQL就是数据库管理系统&#…

VisionPro界面乱序或字体排版异常,字体不适应界面窗口大小

很多人在安装Visionpro后都遇到了一个界面显示异常的问题&#xff1a; 打开visionpro后字体大小不统一,显示不全或显示在其他窗口之上&#xff0c;如下所示。 解决该问题&#xff0c;首先关闭Visionpro软件&#xff0c;右击软件选择属性->兼容性。勾选兼容模式下面的方框。…

颠覆想象的AI绘画:DALL-E 2

DALL-E 2是由美国人工智能研究公司OpenAI推出的文本生成图像系统&#xff0c;它是DALL-E的后续版本&#xff0c;具备更强大的功能和更高的图像质量。“DALL-E”这个名字源于西班牙著名艺术家Salvador Dal和广受欢迎的皮克斯动画机器人“Wall-E”的组合。 发展历史 初代DALL-E&a…

WebStorm 2024.1.1 Mac激活码 前端开发工具集成开发环境(IDE)

WebStorm 2024 Mac激活码 搜索Mac软件之家下载WebStorm 2024 Mac激活版 WebStorm 2024 功能介绍 WebStorm 2024是由JetBrains公司开发的一款专为前端开发设计的集成开发环境&#xff08;IDE&#xff09;。它提供了一整套功能&#xff0c;旨在提高Web开发者的工作效率和代码质…

线性电源运放驱动调整管的方案仿真

群里有人的电路板做出来电压不稳&#xff0c;加负载就掉电压。我对这个运放的工作状态不是很理解&#xff0c;所以仿真了一下。结果却是稳定的。他用12v给运放供电&#xff0c;要求输出10.5. 从仿真看。12运放供电只能输出9v。而且还是到了运放的极限。所以通过仿真后确定怀疑路…

一个简单并完整的springboot项目

一个简单并完整的springboot项目 项目地址1&#xff1a;https://download.csdn.net/download/qq_38234785/89398614 项目地址2&#xff1a;https://mbd.pub/o/buranxin/work 一、接口 curl --location --request POST http://localhost:8080/api/test \ --header Cookie: USER…

LLM的基础模型4:初识Embeddings

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提…

软件安全测评之漏洞扫描、代码审计详情介绍

在当今数字化时代&#xff0c;软件已渗透到我们生活的方方面面。然而&#xff0c;与软件的广泛应用相伴随的是各种安全威胁的出现。为了保障用户和企业的信息安全&#xff0c;软件安全测评变得至关重要。而漏洞扫描和代码审计作为安全测评中的重要过程&#xff0c;卓码测评小编…

【线性代数】SVDPCA

用最直观的方式告诉你&#xff1a;什么是主成分分析PCA_哔哩哔哩_bilibili 奇异值分解singular value decomposition&#xff0c;SVD principal component analysis,PCA 降维操作 pca就是降维后使得信息损失最小 投影在坐标轴上的点越分散&#xff0c;信息保留越多 pca的实现…

2-异常-FileNotFoundException(三种不同的报错)

2-异常-FileNotFoundException(三种不同的报错) 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff08;纯纯技术文&#xff09; 生活公众…

关于认证协议

本地用户认证 本地认证的意思就是&#xff0c;我们的电脑上存储着自己的账号密码&#xff0c;无论电脑是否联网&#xff0c;只要能开机&#xff0c;就可以输入账号密码登录到电脑中&#xff0c;工作组就是采用本地认证 本地认证流程 winlogon.exe -> 接收用户输入 -> …

【异常分析:四分位距与3σ原则】

文章目录 前言四分位距&#xff08;IQR&#xff09;3σ原则使用步骤计算四分位距应用3σ原则 代码 前言 异常分析的目标是识别数据中的异常值&#xff0c;这些异常值可能是由于错误的记录、设备故障或者其他未知原因导致的。四分位距&#xff08;interquartile range, IQR&…

H5进度条样式,自定义进度条

进度条样式预览 实现代码&#xff1a; <view class"mainPro"><view class"proBg"><view class"proDetail" :style"{ width: ${schedule}% }"></view></view><view class"proTxt">完成进…

【StableDiffusion】2024.6.4 亲测成功,无魔法 Civitai 镜像,国内下载 Civitai 模型的方法

一、废话不说&#xff0c;直接开始 废话&#xff1a;请注意&#xff0c;这个插件不是万能的&#xff0c;有一些模型无法下载&#xff0c;大概能下载 70% 左右的模型 1.github下载插件 https://github.com/tzwm/sd-webui-model-downloader-cn/tree/main 这个步骤不用我多说了…

Spring boot集成通义千问大模型实现智能问答

Spring boot集成通义千问大模型实现智能问答 背景 我在用idea进行java开发时发现了通义灵码这款免费的智能代码补全插件&#xff0c;用了一段时间了&#xff0c;感觉很不错。就想着在自己的项目中也能集成通义千问大模型实现智能回答&#xff0c;毕竟对接openai需要解决网络问…

SQL注入-时间盲注

SQL时间盲注&#xff08;Time-based Blind SQL Injection&#xff09;&#xff0c;又叫延时注入&#xff0c;是一种SQL注入攻击技术&#xff0c;用于在无法直接获取查询结果或查看响应内容变化的情况下&#xff0c;通过引入时间延迟来推断数据库的信息&#xff1b;时间盲注依赖…

什么是真正的高效阅读,高效阅读的方法和技巧

一、教程描述 查理芒格说他认识的厉害的人没有一个不读书的&#xff0c;为什么我们也读书却成不了厉害的那个人呢&#xff1f;所以这绝对不是书的问题&#xff0c;而是人的问题。阅读应该带有目的性&#xff0c;要帮我们解决实际问题。如果读一本书只是读完它&#xff0c;那读…