FreeRTOS之消息队列的示例记录

前言

  1. 我的理解是 消息队列主要是用于任务之间存在主从关系的时候,比如说显示屏显示数据,显示屏的作用只是提供显示,数据来源应该是其他任务线程,所以就存在多个线程通信问题。

FreeRTOS中消息队列

  1. 这里我们以数组为例(字符数组)

源码分析

消息队列的创建(主要步骤)

xDisplayQue = xQueueCreate(10, sizeof(uint32_t));
在这里插入图片描述
在这里插入图片描述

消息的发送

在这里插入图片描述在这里插入图片描述

消息的接收

在这里插入图片描述
在这里插入图片描述

demo(核心部分)

创建

QueueHandle_t xDisplayQue;

 xDisplayQue = xQueueCreate(10, sizeof(uint32_t));
    configASSERT(xDisplayQue);

发送

   static char msg[20] = {0};
    uint32_t addr = (uint32_t) (msg);

    while (1) {
        if (xDisplayQue != NULL) {
            sprintf(msg, "hello word:%lu", xTaskGetTickCount());
            printf("发送消息:%s,%#lx\r\n", msg, addr);
            xQueueSend(xDisplayQue, &addr, (TickType_t) 0);
            // xQueueSend(xDisplayQue,  &msg, (TickType_t) 0);/*这种写法是错误的,后面拷贝数据的时候,是拷贝的是msg保存内容的前4个字节*/
            vTaskDelay(10000);
        }

    }

接收

  uint32_t msg_addr;
    for (;;) {
        if (xDisplayQue != 0) {
            // 在创建的队列上接收消息。 阻止 10 个刻度,如果消息无法立即获得。
            if (xQueueReceive(xDisplayQue, (void *) &msg_addr, (TickType_t) 10) == pdTRUE) {

                printf("接收到消息:%s\r\n", ((char *) msg_addr));
                //LCD_ShowString(30, 30, 130, 130, 12, msg);
            }
            vTaskDelay(20);
        }
    }

测试结果

在这里插入图片描述

证明传递数组是值拷贝

  1. 注意在消息队列中发送数据的时候,数据传送的是什么?如果涉及到数组,都是说的值拷贝,而不是地址拷贝
  2. 这涉及到数组的概念
  3. 数组名表示首地址,&数组名[0]表示数组第一个元素的地址也等于数组的首地址

在这里插入图片描述
这样在用消息队列拷贝的过程中传递数组或对数组去地址都是一样的地址,在底层拷贝的时候,就是通过拷贝该地址的数据前几个字节,而不是拷贝地址。

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

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

相关文章

Pytorch学习 day07(神经网络基本骨架的搭建、2D卷积操作、2D卷积层)

神经网络基本骨架的搭建 Module:给所有的神经网络提供一个基本的骨架,所有神经网络都需要继承Module,并定义_ _ init _ _方法、 forward() 方法在_ _ init _ _方法中定义,卷积层的具体变换,在forward() 方法中定义&am…

Python 3 教程(1)

Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python 介绍及安装教程我们在后期中有介…

【高效开发工具系列】Windows 系统下将 Windows 键盘的 ctrl 和 alt 互换

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

JVM——执行引擎

文章目录 1、概述2、计算机语言的发展史2.1、机器码2.2、汇编语言2.3、高级语言2.4、字节码 3、Java代码编译和执行过程4、解释器5、JIT编译器5.1、为什么HotSpot VM同时存在JIT编译器和解释器5.2、热点代码探测确定何时JIT5.3、设置执行模式5.4、C1编译器和C2编译器 6、AOT编译…

【蓝桥杯-单片机】LED和按键小练习:Led彩灯控制系统

文章目录 【蓝桥杯-单片机】LED和按键小练习:Led彩灯控制系统01 题目描述02 题目解答03 本题总结整体逻辑框架(详细版)整体逻辑框架(缩略版)按键读取模块按键消抖模块流水灯显示模式(1)从上向下…

USB PD快充充电器静电浪涌保护TVS

USB PD快充充电器已经成为生活中无处不在的必备物品,它能够为我们的各种电子设备提供快速而便捷的充电解决方案,比如智能手机和平板电脑,笔记本电脑,可穿戴设备,摄像机和摄像设备,汽车充电器,以…

图片二维码不限扫码次数怎么做?长期有效的图片二维码在线生成技巧

图片制作二维码能长期使用吗?在生活中很多地方都可以看到很多存有图片的二维码,通过扫码后查看图片内容,比如一些公共场所、产品介绍、景区等场所中都有图片转二维码的应用。那么怎么做出可以长期扫码展示图片二维码呢,其实方法很…

Awesome-Backbones-main——alexnet模型分析

AlexNet作为骨干网络相对较老,可能在复杂数据集上的表现不如一些最新的深度网络结构,如ResNet、EfficientNet等,学习率调整策略中采用了阶梯式学习率更新器,可能并不总是适合所有数据集和模型,需要根据具体情况调整学习…

【办公类-21-09】三级育婴师 视频转音频Python

背景需求: 用AI对话工具试试能否Python将MP4视频转成音频,再转成文字docx(不用格式工厂转) 结果: 视频MP4转音频wav 视频MP4转音频wav 作者:AI对话大师, 时间:2024年3月8日 impo…

开源的Java报表库JasperReports介绍

JasperReports 是一个流行的开源 Java 报表库,它允许开发人员创建丰富的、基于 Java 的报表,这些报表可以与多种数据源交互,并且可以很容易地集成到 Java 应用程序中。JasperReports 提供了丰富的功能,包括数据可视化、图表、子报…

【Vue+ElementUI】Table表格实现自定义表头展示+表头拖拽排序(附源码)

效果图 因项目采用的是Vue2,所以这个功能目前采用的是Vue2的写法。 Vue3请自行修改扩展代码;或收藏关注帖子,后续Vue3项目如有用到会在本帖子更新修改。 安装vuedraggable(拖拽插件) cnpm i vuedraggable先说用法&…

github Commits must have verified signatures

1.首先确认是否有权限,如有权限的情况下那就是配置有问题了 我的情况是,能拉取代码,提交的时候出现这种情况:Commits must have verified signatures 这里是生成证书,如果已经生成过的,就不用生成了 ssh…

GIS之深度学习08:安装GPU环境下的pytorch

环境: cuda:12.1.1 cudnn:12.x pytorch:2.2.0 torchvision:0.17.0 Python:3.8 操作系统:win (本文安装一半才发现pytorch与cuda未对应,重新安装了cuda后才开始的&a…

超声波清洗机哪个品牌好?四款热度高超声波清洗机力荐

在当今社会,随着生活节奏的加快,年轻人越来越多地依赖眼镜来纠正视力或保护眼睛。无论是为了时尚搭配,还是因为长时间面对电脑和手机屏幕导致的视力问题,眼镜已经成为许多年轻人日常生活中不可或缺的配件。然而,就在我…

SSH安全协议介绍

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! SSH(Secure Shell,安全外壳)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业…

植物病虫害:YOLO水稻虫害识别数据集(6类,五千余张图像,标注完整)

YOLO水稻虫害识别数据集,包含褐飞虱,绿叶蝉,正常叶片,稻虫,二化螟,蝇蛆6个类别,共五千余张图像,yolo标注完整。 适用于CV项目,毕设,科研,实验等 …

uniapp微信小程序获取当前位置

uni-app微信小程序uni.getLocation获取位置;authorize scope.userLocation需要在app.json中声明permission;小程序用户拒绝授权后重新授权-CSDN博客

AIOPS:Zabbix结合讯飞星火做自动化告警+邮件通知并基于人工智能提供解决方案

目前Zabbix官方已经提供Zabbix+ChatGPT的解决方案 ChatGPT一周年,你充分利用了吗?Zabbix+ChatGPT,轻松化解告警! 但是由于需要魔法等其他因素,比较不稳定,遂决定使用国内模型,这里我挑选的是讯飞星火,基于我之前的文档,在此基础上通过Zabbix的告警脚本实现调用AI模型…

安装及管理docker

文章目录 1.Docker介绍2.Docker安装3.免sudo设置4. 使用docker命令5.Images6.运行docker容器7. 管理docker容器8.创建image9.Push Image 1.Docker介绍 Docker 是一个简化在容器中管理应用程序进程的应用程序。容器让你在资源隔离的进程中运行你的应用程序。类似于虚拟机&#…

[LeetCode][102]二叉树的层序遍历——遍历结果中每一层明显区分

题目 102. 二叉树的层序遍历 给定二叉树的根节点 root,返回节点值的层序遍历结果。即逐层地,从左到右访问所有节点。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] 示例 2: 输入…