消息队列何为消息队列队列收发机制队列控制块消息队列相关函数消息队列注意点 何为消息队列消息队列是用于任务与任务,中断与任务之间通信的数据结构,具有不定长,异步的特点。消息队列支持先进先出方式,先进入消息队列的消息先传给任务,同时也支持后进先出方式,即往队首发送消息。 一个消息队列 = 控制块 + 单个消息空间大小 * 队列长度。 消息队列一旦创建无法更改消息空间大小及队列长度,每个消息空间可以存
转载
2024-05-11 11:41:27
71阅读
目录前言一.消息队列的特点1.队列的基本概念2.队列结构体二.队列API函数源码分析1.队列创建函数 xQueueCreate()2.向队列发送消息(出队)(1).队列入队(任务级)(2).队列锁(3).队列入队(中断级)(4).任务与中断中入队的区别3.从队列读取消息(出队)(1).队列出队 (任务级)(2).队列出队(中断级)三.总结 前言本文将详细全方位的讲解FreeRTOS的队列消息,其
转载
2024-03-15 11:21:23
248阅读
FreeRTOS——栈溢出保护栈使用栈溢出检测 - 方法 1栈溢出检测 - 方法 2 栈使用每个任务都维护自己的栈。如果使用xTaskCreate()创建任务,则用作任务栈的内存会从 FreeRTOS 堆自动分配 ,并通过传递给 xTaskCreate() API 函数的参数来确定大小。如果使用xTaskCreateStatic()创建任务,则用作任务栈的内存由应用程序设计者预先分配。栈溢出是应
转载
2024-09-29 19:33:29
44阅读
在任何RTOS中,都具有一个重要的通信机制----消息队列。队列是任务间通信的主要形式。它们可用于在任务之间、中断和任务之间发送消息。在大多数情况下,它们被用作线程安全的FIFO(先进先出)缓冲区,新数据被发送到队列的后面,不过数据也可以发送到前面。 消息队列的概念及其作用(以下基础内容转载自安富莱电子)消息队列就是通过RTOS内核提供的服务,任务或中断服务子程序可以将一个消息(注意,F
转载
2024-03-19 21:25:02
142阅读
一、消息队列的应用场景 消息队列可以应用于发送不定长消息的场合;队列是FreeRTOS 主要的任务间通讯方式,可以在任务与任务间、中断和任务间传送信息;二、消息队列相关的函数1、xQueueCreate() //动态创建消息队列函数
2、xQueueCreateStatic() //静态创建消息队列函数
3
转载
2024-04-12 12:04:14
320阅读
FreeRTOS之消息队列声明:本人按照正点原子的FreeRTOS例程进行学习的,欢迎各位大佬指责和批评,谢谢!消息队列的定义消息队列其实是两个任务之间的数据传递的过程,在没有操作系统之前,使用的是全局变量;使用了FreeRTOS操作系统,就要使用“队列”的机制来完成任务与任务之间、任务与中断之间的数据传递。下面是实验举例:Task1任务获取到键值,使用消息队列发送函数;KeyProcess任务中
转载
2024-04-03 13:33:37
739阅读
一、队列简介队列是为了任务与任务、任务与中断之间的通信而准备的,可以在任务与任务、任务与中断之间传递消息,队列中可以存储有限的、大小固定的数据项目。 任务与任务、任务与中断之间要交流的数据保存在队列中,叫做队列项目。队列所能保存的最大数据项目数量叫做队列的长度,创建队列的时候会指定数据项目的大小和队列的长度。由于队列用来传递消息的,所以也称为消息队列。FreeRTOS中的信号量的也是依据队列实现的
转载
2024-04-01 20:45:47
197阅读
使用任务通知将事件或数据发送到任务比使用队列,信号量或事件组执行等效操作要快得多。同样,与使用队列,信号量或事件组执行等效操作相比,使用任务通知将事件或数据发送到任务所需的RAM要少得多。这是因为必须先创建每个通信对象(队列,信号灯或事件组),然后才能使用它,而启用任务通知功能具有固定的开销,镶嵌在任务控制块TCB中,如下:#if( configUSE_TASK_NOTIFICATIONS ==
转载
2024-06-26 11:06:36
96阅读
写在前面:本文章为《STM32MP157开发教程之FreeRTOS操作系统篇》系列中的一篇,笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板)。stm32mp157是ARM双核,2个A7核,1个M4核,A7核上可以跑Linux操作系统,M4核上可以跑FreeRTOS、RT-Thread等实时操作系统,STM32MP157开发板所以既可以学嵌入式linux,也可以学stm
转载
2024-08-30 11:10:59
179阅读
在嵌入式开发中,使用FreeRTOS进行任务间通信是非常常见的需求。其中,消息队列是一种很好的实现方式,可以实现任务之间的数据传递和同步。本文将通过一个示例来详细介绍如何在FreeRTOS中使用消息队列。
### 消息队列流程
首先,我们来看一下在FreeRTOS中使用消息队列的基本流程:
| 步骤 | 操作 |
| ------ | ------ |
| 步骤一 | 创建消息队列 |
|
原创
2024-05-17 10:44:25
119阅读
一、收发主要逻辑1、接收:利用DMA和空闲中断一次接收一帧的不定长数据,接收到数据后“暂停”(之后分析为何要暂停而不是停止)DMA,快速利用结构体存储接收到数据的地址和长度,再利用队列能够传递结构体的特点,将所收数据的地址和长度入队,然后打开DMA接收。数据处理任务检测队列状态,只要队列中有有效数据就开始数据处理。 2.发送:先将要发送的数据存入循环数组(伪)中,再利用队列将数据的地址和长度入队,
转载
2024-04-06 21:00:04
1038阅读
freeRtos学习笔记freeRtos消息队列为什么要用消息队列消息队列可以在任务与任务间,中断与任务间传递信息。为什么不用全局数组?全局数组也可以传递信息,但是和消息队列相比,消息队列有一下优势:全局数组需要解决多任务访问冲突,需要加临界区保护消息队列可以实现超时机制消息队列可以实现FIFO和LIFO机制消息队列创建QueueHandle_t xQueueCreate(UBaseType_t
转载
2024-03-20 12:35:11
69阅读
功能及区别列表消息队列(需要传递消息时使用) 在任务与任务间、 中断和任务间传递信息,可以数据传输事件标志组(多个事件同步,不需要传递消息时使用) 实现任务与任务间、 中断和任务间的同步,无数据传输。可实现一对多、多对多的同步, 可选择是 “ 逻辑或 ” 触发还 是 “ 逻辑与 ”触发。即
转载
2024-08-04 11:29:32
149阅读
目录前言10.1 消息队列概念10.2 消息队列的数据传输机制10.3 消息队列的阻塞访问机制10.4 消息队列使用场景10.5 消息队列控制块10.5.1 队列控制块源码10.5.2 队列控制块成员剖析10.5.3 cRxLock 和 cTxLock10.5.4 队列控制块数据结构图10.6 创建消息队列10.6.1 创建消息队列API说明10.6.2 创建消息队列简要步骤10.6.3 创建消息
转载
2024-07-31 23:37:24
213阅读
一、基础概念作用:队列是为了任务与任务、任务与中断之间的通信而准备的,可以在任务与任务、任务与中断之间传递消息,队列中可以存储有限的、大小固定的数据项目。二、运行机制在脑海中想像不同任务之间,其需要交互数据的时候,需要的一种通信机制,这种机制在该操作系统就是“消息队列”其特点是任何建立的任务都可以向队列中发送消息和取信息。1、首先就是创建队列创建消息队列时 FreeRTOS 会先给消息队列分配一块
转载
2024-04-21 12:47:32
64阅读
文章目录一、消息队列二、信号量三、互斥量四、事件五、通知 一、消息队列消息队列是一种常用于任务间通信的数据结构, 队列可以在任务与任务间、中断和任务间传递信息。读写队列均支持超时机制。1、创建队列QueueHandle_t xQueueCreate( UBaseType_t uxQueueLength,//队列长度
UBaseType_t uxItemSize );//队列中消息单
转载
2024-04-03 13:39:32
140阅读
首先介绍三个函数:1.消息队列创建函数函 数 原 型:
QueueHandle_t xQueueCreate( UBaseType_t uxQueueLength,
UBaseType_t uxItemSize );
功 能:用于创建一个新的队列。
参 数:
uxQueueLength: 队列能够存储的最大消息单元数目,即队列长度。
uxItemSize: 队列中消息单元的大小,以
转载
2024-03-29 06:39:43
105阅读
1-队列队列(我对队列的理解就是上体育课,排队这种)是任务之间通信的一种方式。队列可以用于任务和任务之间或者中断和任务之间消息的接收与发送。在多数情况下,他们消息缓冲是按照FIFO(先进先出)原则。也就是最新的数据在上一个数据的后面,换句话说就是,类似于吃羊肉串,比如第一个串起来的,就第一个被吃掉。 下图是队列的数据读写: FreeRTOS队列用户通常情况下会把灵活性与简单性相结合,但是这种类型通
转载
2024-10-17 19:57:20
17阅读
本实验首先大家自身要有stm32cubemx基础配置,比如GPIO、中断、串口、SPI等,FreeRTOS有相关的调用函数基础及调度任务的概念都需要提前理解。单独stm32cubemx或FreeRTOS网上很多,这里就不细说了。第一步首先打开stm32cubemx软件,创建工程之后,除了把sys、Rcc配置完成还得勾选一下FreeROTS选项enabled如下图这样configuration就生成
转载
2024-05-14 22:49:41
110阅读
由于看到的FREERTOS的例程中关于消息队列的代码,大多数都是传递的一个字节的数值;而在实际应用中,需要传递的数据类型可以是浮点数,也可以是数组,也可以是uint16数据,所以上述链接的传递结构体指针的思路很符合我的需求。同时,使用RTOS+消息队列的处理方式,至少有以下两个优点:1、便于开发,因为各个模块之间是通过消息队列进行数据交互,没有直接耦合,无需像裸机编程一样进行全局变量的
转载
2024-04-30 19:16:45
72阅读