4.3 FreeRTOS----队列的应用
来源:互联网 发布:tomcat 源码分析 pdf 编辑:程序博客网 时间:2024/06/05 19:17
xQueueCreate()API函数
在使用队列之前必须明确创建一个队列。队列由句柄引用,它们是QueueHandle_t类型的变量。 xQueueCreate() API函数创建一个队列,并返回一个引用其创建的队列的QueueHandle_t。
FreeRTOS V9.0.0还包括xQueueCreateStatic()函数,它在编译时分配静态创建队列所需的内存:FreeRTOS在创建队列时从FreeRTOS堆分配RAM。 RAM用于保存队列数据结构和队列中包含的项目。 如果没有足够的堆RAM可用于要创建的队列,xQueueCreate()将返回NULL。
函数原型及参数说明如下:
QueueHandle_t xQueueCreate( UBaseType_t uxQueueLength, UBaseType_t uxItemSize );
uxQueueLength
uxItemSize
返回的非NULL值表示已成功创建队列。 返回值应存储为创建队列的句柄。
创建队列后,可以使用xQueueReset()API函数将队列返回到原始的空状态。
xQueueSendToBack()和xQueueSendToFront()API函数
可以预期,xQueueSendToBack()用于将数据发送到队列的后端(尾部),xQueueSendToFront()用于将数据发送到队列的前端(head)。
xQueueSend()等同于和xQueueSendToBack()完全相同的。注意:不要从中断服务程序调用xQueueSendToFront()或xQueueSendToBack()。 中断安全版本中应该使用xQueueSendToFrontFromISR()和xQueueSendToBackFromISR()API函数。
函数原型及参数说明如下:BaseType_t xQueueSendToFront( QueueHandle_t xQueue, const void * pvItemToQueue, TickType_t xTicksToWait );BaseType_t xQueueSendToBack( QueueHandle_t xQueue, const void * pvItemToQueue, TickType_t xTicksToWait );
xQueue
pvItemToQueue
队列可以保存的每个项目的大小在创建队列时设置,因此这么多字节将从pvItemToQueue复制到队列存储区域。
xTicksToWait
xQueueSendToFront()和xQueueSendToBack()将立即返回,如果xTicksToWait为零并且队列已满。
阻塞时间在系统时间周期中指定,因此其表示的绝对时间取决于系统时间频率。 宏pdMS_TO_TICKS()可用于将以毫秒指定的时间转换为在ticks中指定的时间。
将xTicksToWait设置为portMAX_DELAY将导致任务无限期地等待(没有超时),如果在FreeRTOSConfig.h中将INCLUDE_vTaskSuspend设置为1。
1. pdPASS
只有当数据成功发送到队列时,才会返回pdPASS。
如果指定了一个阻塞时间(xTicksToWait不为零),则调用任务可能被置于阻塞状态,等待空间在队列中可用,然后返回该函数,但数据已成功写入 在阻塞时间过期前排队。
2. errQUEUE_FULL
由于队列已满,因此无法将数据写入队列时将返回errQUEUE_FULL。
如果指定了一个阻塞时间(xTicksToWait不为零),则调用任务将被置于阻塞状态,等待另一个任务或中断在队列中空格,但指定的阻塞时间在发生之前已过期。
xQueueReceive()API函数
xQueueReceive()用于从队列中接收(读取)一个项目。 接收到的项目将从队列中删除。注意:不要从中断服务程序调用xQueueReceive()。 中断中应该使用xQueueReceiveFromISR()API函数。
函数原型及参数说明如下:
BaseType_t xQueueReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait );
xQueue
pvBuffer
指向接收到的数据将被复制到的存储器的指针。
创建队列时设置队列所保存的每个数据项的大小。 pvBuffer指向的内存必须至少足够大以容纳多个字节。
xTicksToWait
如果xTicksToWait为零,那么如果队列已经为空,则xQueueReceive()将立即返回。
阻塞时间在刻度周期中指定,因此其表示的绝对时间取决于刻度频率。 宏pdMS_TO_TICKS()可用于将以毫秒指定的时间转换为在ticks中指定的时间。
将xTicksToWait设置为portMAX_DELAY将导致任务无限期地等待(没有超时),因为FreeRTOSConfig.h中的INCLUDE_vTaskSuspend设置为1。
1. pdPASS
只有在从队列中成功读取数据时,才会返回pdPASS。
如果指定了一个阻塞时间(xTicksToWait不为零),则调用任务可能被置于阻塞状态,等待数据在队列上可用,但在块时间之前成功从队列中读取数据过期。
2. errQUEUE_EMPTY
由于队列已经为空,因此无法从队列读取数据时将返回errQUEUE_EMPTY。
如果指定了一个阻塞时间(xTicksToWait不为零),则调用任务将被置于阻塞状态,以等待另一个任务或中断将数据发送到队列,但在发生之前已过期。
uxQueueMessagesWaiting()API函数
uxQueueMessagesWaiting()用于查询当前在队列中的项目数。注意:不要从中断服务程序调用uxQueueMessagesWaiting()。 应该使用中断安全的uxQueueMessagesWaitingFromISR()。
函数原型及参数说明如下:
UBaseType_t uxQueueMessagesWaiting( QueueHandle_t xQueue );
xQueue
- 4.3 FreeRTOS----队列的应用
- 基于FreeRTOS的队列管理的应用
- 基于FreeRTOS的队列管理的应用
- 基于FreeRTOS的队列管理的应用
- 基于FreeRTOS的队列管理的应用
- 4.2 FreeRTOS----队列的特点
- Freertos 队列
- FreeRTOS队列
- FreeRTOS的队列发送源码解析
- FreeRTOS队列接收
- FreeRTOS 队列例程Demo
- FreeRTOS 队列使用
- FreeRTOS 消息队列
- FreeRTOS 学习四:队列
- FreeRTOS学习2--队列
- FreeRTOS 队列分析
- 《FreeRTOS多任务之间的通信》(队列)
- FreeRTOS系列第17篇---FreeRTOS队列
- 位置信息挖掘
- 万事开头难
- 模型视图中的委托
- 人工智能开发环境 Anaconda使用
- HTML——基本标签和重要概念
- 4.3 FreeRTOS----队列的应用
- LeetCode 665. 不增加的数组
- java编程:无序整数序列,求其中第K大的数。
- 绪论
- C++之不同进程消息通信
- C# 反射泛型
- paper read weekly(three)
- 目标检测(四)--ICF
- position和float的区别