基于 FreeRTOS 的应用程序由一组独立的任务构成——每个任务都是具有独立权限的小程序。这些独立的任务之间很可能会通过相互通信以提供有用的系统功能。FreeRTOS 中所有的通信与同步机制都是基于队列实现的。一、队列的特性1.1、数据存储  队列可以保存有限个具有确定长度的数据单元。队列可以保存的最大单元数目被称为队列的“深度”。在队列创建时需要设定其深度和每个单元的大小。通常情况下,队列
文章主要讲解如何创建和使用队列消息队列浅析:一个或者多个任务可以通过 RTOS 内核服务从队列中得到消息,通常先进入消息队列消息先传 给任务,即先进先出的原则(FIFO),FreeRTOS消息队列支持 FIFO 和 LIFO 两种数据存取方式。相比消息队列,使用全局数组主要有如下四个问题: a、使用消息队列可以让 RTOS 内核有效地管理任务,而全局数组是无法做到的,任务的超时等
队列简介:注意,队列长度并不是每个队列的字节数,而是能存多少条数据。如我们创建一个队列,每条消息最大10字节,队列可以保存4条消息,那么队列的长度为4。队列的功能:1 数据拷贝为什么一定要使用数据拷贝?考虑以下情况,我们在任务中创建了一个局部变量,而局部变量可能随时会被删掉,此时如果使用引用传递(指针),数据可能就会出现问题;另外,如果采用指针,则在这个变量被队列引用之前,变量值是不能改变的,这就
FreeRTOS消息队列简介队列是为了任务与任务、任务与中断之间的通信而准备的。队列可以在任务与任务、任务与中断之间传递消息队列中可以存储有限的、大小固定的数据项目。任务与任务、任务与中断之间要交流的数据保存在队列中,叫做队列项目。队列所能保存的最大数据项目的数量叫做队列的长度。创建队列时会指定数据项目的大小和队列的长度。由于队列是用来传递消息的所以队列也叫做 消息队列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
FreeRTOS消息队列基于 FreeRTOS 的应用程序由一组独立的任务构成——每个任务都是具有独立权限的程序。这些独立的任务之间的通讯与同步一般都是基于操作系统提供的IPC通讯机制,而FreeRTOS 中所有的通信与同步机制都是基于队列实现的。消息队列是一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断和任务间传送信息,实现了任务接收来自其他任务或中断的不固定长度的消息。任务能够从队
文章目录延时函数队列基础介绍队列简介队列特点阻塞情况运行情况结构体及API函数队列的结构体API函数创建队列写入队列读取队列消息实验测试 延时函数1.vTaskDelay():相对延时,每次延时从该函数开始计算。 2.vTaskDelayUntil():绝对延时,将整个任务的运行周期看成一个整体,延时时间包括:任务主体运行时间+延时时间+其他抢占任务执行时间。所以适合用在需要按照一定频率运行的任
       在没有使用队列之前,任务之间的通信是通过共享全局变量或者传递指针参数来进行消息传递,但是全局变量一旦使用多了就会占用很大的资源,在操作系统中,这就会涉及到资源管理的问题。操作系统需要管理有限的资源,进而产生了队列,解决了任务与任务、中断与中断、任务与中断的通信问题,任务与任务、任务与中断之间要交流的数据保存在队列中,这就叫做
功能及区别列表消息队列(需要传递消息时使用) 在任务与任务间、 中断和任务间传递信息,可以数据传输事件标志组(多个事件同步,不需要传递消息时使用) 实现任务与任务间、 中断和任务间的同步,无数据传输。可实现一对多、多对多的同步, 可选择是 “ 逻辑或 ” 触发还 是 “ 逻辑与 ”触发。即 一 个任务可以等待多个事件的发生。信号量(单个事件同步,不需要传递消息时使用)#二值信号量类似一个标志位。仅
FreeRTOS消息队列 传递结构体指针和结构体异同1 消息队列传递结构体指针和结构体异同2 使用队列传递复合数据类型3 利用队列传递数据的指针(处理速度更快)3.1 指针指向的内存空间所有权必须明确3.2 指针指向的内存空间必须有效传递结构体的指针传递结构体本身4 传递结构体指针和结构体本身的异同5 验证5.1 结构体传值模式5.2 传递结构体指针模式5.3 memcpy 函数5.4 mems
FREERTOS学习笔记三-消息队列1.实验内容 实验二内容:创建两个动态任务,任务一控制LED的闪烁,任务二用于检测按键。当按键KEY0按下时,任务一被挂起;当按键KEY1被按下时,任务一被取消挂起。 实验三是在实验二的基础上进行修改,增加一个消息队列和两个任务进程;任务二按键检测,当按键被按下时,会发生消息;任务三和任务四负责接收消息。2.CubeMX的配置1.1添加两个优先级相同的任务1.2
目录队列简介队列结构体队列操作队列实验    在实际的应用中,常常会遇到一个任务或者中断服务需要和另一个任务进行“沟通交流”,这个“沟通交流”的过程其实就是消息传递的过程。队列是为了任务与任务,任务与中断之间的通信而准备的。可以在任务与任务,任务与中断之间传递消息队列中可以在存储有限的,大小固定的数据项目。 队列简介FreeRTOS的通信介质是队列队列是一个先进先
一、基本介绍1、消息队列就是一个像容器一样的东西,我们所有的任务都可以往内部写,然后队列会将我们的消息按顺序存下来,所有的任务也可以按顺序将其读出来。2、队列需要明确数据的大小以及队列的长度,写队列和读队列都是采用赋值的方式将数据复制过去使用的。3、数据的操作默认采用先进先出的方式,写数据时放到尾部,读数据时从头部读二、基本配置1、配置RCC、USART1、时钟84MHz2、配置SYS,将Time
转载 7月前
290阅读
 由于看到的FREERTOS的例程中关于消息队列的代码,大多数都是传递的一个字节的数值;而在实际应用中,需要传递数据类型可以是浮点数,也可以是数组,也可以是uint16数据,所以上述链接的传递结构体指针的思路很符合我的需求。同时,使用RTOS+消息队列的处理方式,至少有以下两个优点:1、便于开发,因为各个模块之间是通过消息队列进行数据交互,没有直接耦合,无需像裸机编程一样进行全局变量的
目录队列简介FreeRTOS队列特点队列操作基本过程 队列结构体介绍队列结构体整体示意图队列相关API函数介绍创建队列相关API函数介绍往队列写入消息API函数往队列写入消息函数入口参数解析从队列读取消息API函数实验源码队列简介队列是任务到任务、任务到中断、中断到任务数据交流的一种机制(消息传递)类似全局变量?假设有一个全局变量a = 0,现有两个任务都在写这个变量a假设在任务1完成2
使用队列传递复合数据类型一个任务从单个队列中接收来自多个发送源的数据是经常的事。通常接收方收到数据后,需要知道数据的来源,并根据数据的来源决定下一步如何处理。一个简单的方式就是利用队列传递结构体,结构体成员中就包含了数据信息和来源信息,下图对这一方案进行了展现。 从图中可以看出:创建一个队列用于保存类型为 xData 的结构体数据单元。结构体成员包括了一个数据值和表示数据含义的编码,两者合为一个消
转载 4月前
45阅读
13. 消息队列消息队列是一种常用于任务键通信的数据结构,队列可以在任务与任务间、中断与任务间传递信息,实现了任务接收来自其他任务或者中断的不定长数据。任务能从队列中读取信息,当队列中的消息为空时,读取消息的任务将被阻塞。用户还可以指定阻塞的任务时间xTicksToWait,在这段时间中,如果队列为空,该任务将保持阻塞状态以等待队列数据有效,当队列中有新消息时,被阻塞的任务会被唤醒并处理新消息。当
FreeRTOS消息队列消息队列简介消息队列数据存储消息队列阻塞机制出队阻塞入队阻塞消息队列控制块消息队列操作示图常用消息队列 API 函数xQueueCreate 创建一个新队列vQueueDelete 删除队列xQueueSend 向队列中发送一个消息(从队列尾插入)(任务中使用)xQueueSendFromISR向队列中发送一个消息(从队列尾插入)(中断中使用)xQueueSendToFr
队列中传输大数据(一个包)或大小可变的数据传大数据传输不同类型和长度的数据从多个队列中获取数据队列集合xQueueCreateSet()xQueueAddToSet()xQueueSelectFromSet()示例使用队列创建邮箱xQueueOverwrite()xQueuePeek() 队列中传输大数据(一个包)或大小可变的数据传大数据如果存储在队列中的数据项很大,则最好将指向数据的指针存放
队列背景队列简介队列结构体队列创建向队列发送消息队列上锁和解锁从队列读取消息 背景实际的应用中,常常会遇到一个任务或者中断服务需要和另外一个任务进行“沟通交流”,这个“沟通交流”的过程其实就是消息传递的过程。为此,FreeRTOS 提供了一个叫做“队列”的机制来完成任务与任务、任务与中断之间的消息传递。本文主要结合队列源码分析了创建、发送到接收的过程。队列简介列队入队和出队的过程可以用下面图演示
  • 1
  • 2
  • 3
  • 4
  • 5