当前位置: 首页 > news >正文

FreeRTOS - 消息队列

一.消息队列的概念及应用

消息队列(queue):可以在任务与任务间、中断和任务间传递消息,实现任务接收来自其他任务或中断的不固定的消息

1.1任务需求

1、使用消息队列检测串口输入

2、通过串口发送字符串openled1,openled2,openled3,分别打开板载led1,led2,led3

3、通过串口发送字符串closeled1,closeled2,closeled3,分别关闭板载led1,led2,led3

1.2API

函数原型

#include “FreeRTOS.h”

#include “queue.h”

QueueHandle_t xQueueCreate( ①UBaseType_t uxQueueLength, ②UBaseType_t uxItemSize );

功能概述

创建一个消息队列,并返回消息队列句柄

参数

①:队列一次可容纳消息的最大长度

②:队列中每个消息体大小

返回值

NULL:创建失败

Any other value :创建成功,返回消息队列句柄

注意事项

队列可以用于任务与任务通信,也是用于中断与任务通信

可在调度器开启之前,创建消息队列

函数原型

#include “FreeRTOS.h”

#include “queue.h”

BaseType_t xQueueSend/xQueueSendToFront/xQueueSendToBack(

① QueueHandle_t xQueue,

②const void * pvItemToQueue,

③ TickType_t xTicksToWait );

功能概述

在任务中往队列中传入消息

xQueueSend 等价于xQueueSendToBack 入到队尾

xQueueSendToFront 入到队头

参数

①:消息队列句柄

②:要发送的消息的地址

③:阻塞等待时间

返回值

pdPASS:发送成功

errQUEUE_FULL:队列已经满,发送失败

注意事项

None

函数原型

#include “FreeRTOS.h”

#include “queue.h”

BaseType_t xQueueSendFromISR/xQueueSendToFrontFromISR/xQueueSendToBackFromISR (

① QueueHandle_t xQueue,

②const void * pvItemToQueue,

③ BaseType_t *pxHigherPriorityTaskWoken);

功能概述

在中断中往队列中传入消息

xQueueSendFromISR 等价于xQueueSendToBackFromISR 入到队尾

xQueueSendToFrontFromISR 入到队头

参数

①:消息队列句柄

②:要发送的消息的地址

③:NULL

返回值

pdTRUE:发送成功

errQUEUE_FULL:队列已经满,发送失败

注意事项

调用此函数,会触发上下文切换(当前被中断的任务优先级低于解除阻塞的任务)

在启动调度器之前不能调用此函数

函数原型

#include “FreeRTOS.h”

#include “queue.h”

BaseType_t xQueueReceive(

①QueueHandle_t xQueue,

②void *pvBuffer,

③TickType_t xTicksToWait );

功能概述

在任务中读取消息队列消息

参数

①:消息队列句柄

②:接收消息的缓冲区

③:阻塞等待时间

返回值

pdPASS:创建失败

errQUEUE_EMPTY:消息队列为空

注意事项

None

函数原型

#include “FreeRTOS.h”

#include “queue.h”

BaseType_t xQueueReceiveFromISR(

① QueueHandle_t xQueue,

② void *pvBuffer,

③BaseType_t *pxHigherPriorityTaskWoken );

功能概述

在中断中读取消息队列消息

参数

①:消息队列句柄

②:接收消息的缓冲区

③:NULL

返回值

pdPASS:创建失败

pdFAIL:消息队列为空

注意事项

调用此函数,会触发上下文切换(当前被中断的任务优先级低于解除阻塞的任务)

在启动调度器之前不能调用此函数

二.函数应用

http://www.lryc.cn/news/44815.html

相关文章:

  • 怎样正确做 Web 应用的压力测试?
  • php mysql大学生求职招聘资源信息网zkfdzkf67a8
  • 2023上海市“星光计划”职业院校技能大赛 网络安全竞赛试题任务书
  • Spring事务源码:创建代理类
  • java14 使用增强的模式匹配切换表达式
  • python【正则表达式】
  • Ubuntu常见系统问题解决方式
  • C/C++中的虚拟内存
  • Qt C++与Python混合编程:补充错误
  • 2023-04-01:当Go语言遇见FFmpeg视频解码器,使用Go语言改写decode_video.c文件,提升视频解码效率与开发体验。
  • Solidity 学习笔记
  • ThreadLocal原理
  • 串操作指令详解 MOVS,LODS,STOS,CMPS,SCAS,REP
  • Java实现判断素数
  • PHP初级教程------------------(2)
  • 【SQL开发实战技巧】系列(三十五):数仓报表场景☞根据条件返回不同列的数据以及Left /Full Join注意事项
  • springBoot自动配置过程介绍
  • PostgreSQL最后的救命稻草 — pg_resetwal
  • 彻底关闭Windows更新
  • Java正则表达式语法
  • 【2023-3-29】JavaScript使用promise顺序调用函数并抛出异常
  • Python实现GWO智能灰狼优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战
  • 从redis到epoll到mmap
  • STM32CubeMX快速构造工程模板(一)
  • Java Web中的ServletContext对象
  • 回归预测 | MATLAB实现PSO-RF粒子群算法优化随机森林多输入单输出回归预测
  • 在小公司工作3年,从事软件测试5年了,才发现自己还是处于“初级“水平,是不是该放弃....
  • 基于 OpenCV 与 Java 两个语言版本实现获取某一图片特定区域的颜色对比度
  • Book:实战Java高并发程序设计(第二版)
  • LeetCode 831. Masking Personal Information【字符串,正则表达式】中等