目录队列简介FreeRTOS队列特点队列操作基本过程 队列结构介绍队列结构整体示意图队列相关API函数介绍创建队列相关API函数介绍往队列写入消息API函数往队列写入消息函数入口参数解析从队列读取消息API函数实验源码队列简介队列是任务到任务、任务到中断、中断到任务数据交流的一种机制(消息传递)类似全局变量?假设有一个全局变量a = 0,现有两个任务都在写这个变量a假设在任务1完成2
背景我们假定现在创建了3个工作线程,这3个线程都需要通过串口输出日志或内容。很简单的认为,我们可以做到各个任务连续输出自己线程的内容,实际上不是的,这涉及到了多线程原理,有时间跟大家说说,或者大家可以去了解了解。 在这篇文章只涉及题目提出的问题解决方法。准备工作STM32 Cube系列软件开发工具一块可以使用的STM32单片机一个ST LINK 下载器 和 一个 USB 转 TTL一个可以正常工作
FREERTOS学习笔记三-消息队列1.实验内容 实验二内容:创建两个动态任务,任务一控制LED的闪烁,任务二用于检测按键。当按键KEY0按下时,任务一被挂起;当按键KEY1被按下时,任务一被取消挂起。 实验三是在实验二的基础上进行修改,增加一个消息队列和两个任务进程;任务二按键检测,当按键被按下时,会发生消息;任务三和任务四负责接收消息。2.CubeMX的配置1.1添加两个优先级相同的任务1.2
目录队列简介队列结构队列操作队列实验    在实际的应用中,常常会遇到一个任务或者中断服务需要和另一个任务进行“沟通交流”,这个“沟通交流”的过程其实就是消息传递的过程。队列是为了任务与任务,任务与中断之间的通信而准备的。可以在任务与任务,任务与中断之间传递消息队列中可以在存储有限的,大小固定的数据项目。 队列简介FreeRTOS的通信介质是队列队列是一个先进先
FreeRTOS消息队列 传递结构指针和结构异同1 消息队列传递结构指针和结构异同2 使用队列传递复合数据类型3 利用队列传递数据的指针(处理速度更快)3.1 指针指向的内存空间所有权必须明确3.2 指针指向的内存空间必须有效传递结构的指针传递结构本身4 传递结构指针和结构本身的异同5 验证5.1 结构传值模式5.2 传递结构指针模式5.3 memcpy 函数5.4 mems
 由于看到的FREERTOS的例程中关于消息队列的代码,大多数都是传递的一个字节的数值;而在实际应用中,需要传递的数据类型可以是浮点数,也可以是数组,也可以是uint16数据,所以上述链接的传递结构指针的思路很符合我的需求。同时,使用RTOS+消息队列的处理方式,至少有以下两个优点:1、便于开发,因为各个模块之间是通过消息队列进行数据交互,没有直接耦合,无需像裸机编程一样进行全局变量的
队列(任务之间“全局变量”)        在实际的应用中,常常会遇到一个任务或者中断服务需要和另外一个任务进行“沟通交流”, 这个“沟通交流”的过程其实就是消息传递的过程.在没有操作系统的时候两个应用程序进行 消息传递一般使用全局变量的方式,但是如果在使用操作系统的应用中用全局变量来传递消息 就会涉及到“资源管理”的
队列背景队列简介队列结构队列创建向队列发送消息队列上锁和解锁从队列读取消息 背景实际的应用中,常常会遇到一个任务或者中断服务需要和另外一个任务进行“沟通交流”,这个“沟通交流”的过程其实就是消息传递的过程。为此,FreeRTOS 提供了一个叫做“队列”的机制来完成任务与任务、任务与中断之间的消息传递。本文主要结合队列源码分析了创建、发送到接收的过程。队列简介列队入队和出队的过程可以用下面图演示
FreeRTOS消息队列基于 FreeRTOS 的应用程序由一组独立的任务构成——每个任务都是具有独立权限的程序。这些独立的任务之间的通讯与同步一般都是基于操作系统提供的IPC通讯机制,而FreeRTOS 中所有的通信与同步机制都是基于队列实现的。消息队列是一种常用于任务间通信的数据结构队列可以在任务与任务间、中断和任务间传送信息,实现了任务接收来自其他任务或中断的不固定长度的消息。任务能够从队
消息队列创建及运行,参阅安富莱电子demostatic QueueHandle_t xQueue1 = NULL; static QueueHandle_t xQueue2 = NULL; typedef struct Msg { uint8_t ucMessageID; uint16_t usData[2]; uint32_t ulData[2]; }MSG_T; MSG_T
文章目录01 - 通信介质02 - 通信方式03 - 通信操作04 - 总结   在第一篇概念的思维导图中,任务的下一个概念就是队列,一个实际的FreeRTOS系统肯定会有多个任务,这些任务经常需要协同运作,因此必然需要通信,不止任务和任务之间,任务和中断之间也需要通信。对于通信,需要了解通信介质、通信方式和通信操作。01 - 通信介质  FreeRTOS的通信介质是队列队列是一个先进先出的数
1.前言freeRTOS中所有任务的通信和同步机制都是基于队列来实现。2.队列的特点图 队列的读写操作队列的数据存储(1)队列可以保存有限个具有确定长度的数据单元,队列可以保存的最大单元数目称为队列的深度;(2)队列创建时需要设定队列深度和每个单元的大小;(3)队列先进先出多任务存取队列是内核中具有独立权限的对象,不属于任何任务,可以有多个任务进行读写读队列阻塞(1)任务读取队列数据时可以指定一个
FreeRTOS队列队列是主要的任务间通讯方式。可以在任务与任务间、中断和任务间传送信息。大多数情况下,队列用于具有线程保护的FIFO(先进先出)缓冲区:新数据放在队列的后面。当然,数据也可以放在队列的前面,在下一篇讲队列API函数时,会涉及到数据的存放位置。使用模型:最简单、最灵活通常情况下,鱼和熊掌是不可兼得的,但FreeRTOS队列用户模型管理却兼顾简单和灵活。发送队列消息是通过拷贝实
使用队列传递复合数据类型一个任务从单个队列中接收来自多个发送源的数据是经常的事。通常接收方收到数据后,需要知道数据的来源,并根据数据的来源决定下一步如何处理。一个简单的方式就是利用队列传递结构结构成员中就包含了数据信息和来源信息,下图对这一方案进行了展现。 从图中可以看出:创建一个队列用于保存类型为 xData 的结构数据单元。结构成员包括了一个数据值和表示数据含义的编码,两者合为一个消
转载 2月前
45阅读
13. 消息队列消息队列是一种常用于任务键通信的数据结构队列可以在任务与任务间、中断与任务间传递信息,实现了任务接收来自其他任务或者中断的不定长数据。任务能从队列中读取信息,当队列中的消息为空时,读取消息的任务将被阻塞。用户还可以指定阻塞的任务时间xTicksToWait,在这段时间中,如果队列为空,该任务将保持阻塞状态以等待队列数据有效,当队列中有新消息时,被阻塞的任务会被唤醒并处理新消息。当
1、freertos数据传递简介在freertos中,各个模块都是独立的任务,那么任务之间怎么进行大量的数据通信呢?在V10版本给出了三种方法。队列queue,发送固定长度的数据串stream buffer,为新增的特性,发送不定长度的数据串message buffer,为新增的特性,发送不定长度的数据串,同时带有发送长度信息以上三者,都可以用于任务-任务,任务-中断,都遵循FIFO先进先出原则,
       在没有使用队列之前,任务之间的通信是通过共享全局变量或者传递指针参数来进行消息传递,但是全局变量一旦使用多了就会占用很大的资源,在操作系统中,这就会涉及到资源管理的问题。操作系统需要管理有限的资源,进而产生了队列,解决了任务与任务、中断与中断、任务与中断的通信问题,任务与任务、任务与中断之间要交流的数据保存在队列中,这就叫做
队列的进阶 一、队列消息队列队列是什么,对于程序员都不会陌生,在单片机开发的时候,也会有接触。比如串口,有些MCU的串口为了高效自带FIFO功能。队列简单易用,在物联网下基于RTOS的开发中更是显神通,称为消息队列消息队列FreeRTOS下所有的通信与同步机制都是基于队列实现的。用法和创建任务类似,独立于任务,也是RTOS下核心的一个组件。主要有几个特性:1.缓冲数据:和普通队列
功能及区别列表消息队列(需要传递消息时使用) 在任务与任务间、 中断和任务间传递信息,可以数据传输事件标志组(多个事件同步,不需要传递消息时使用) 实现任务与任务间、 中断和任务间的同步,无数据传输。可实现一对多、多对多的同步, 可选择是 “ 逻辑或 ” 触发还 是 “ 逻辑与 ”触发。即 一 个任务可以等待多个事件的发生。信号量(单个事件同步,不需要传递消息时使用)#二值信号量类似一个标志位。仅
目录FreeRTOS的学习系列文章目录前言1 队列结构2 队列的收发函数2.1 xQueueGenericSend2.1.1 整体函数逻辑讲解2.1.2 入队的局部函数讲解2.2 队列上锁和解锁3 写在后面 前言队列FreeRTOS中起到比较重要的作用,主要用于任务之间消息的传递,取代了裸机时代中的全局变量交互功能。队列的机制实现了任务与任务、任务与中断之间的消息传递。1 队列结构新版
  • 1
  • 2
  • 3
  • 4
  • 5