FreeRTOS(九)——队列

FreeRTOS提供了一种称为“队列”的机制,用于在多任务环境中安全地传递信息。队列采用FIFO原则,支持数据存储、多任务访问,并允许在出队和入队时设置阻塞时间。队列的创建可通过静态或动态方式,且包含多种操作函数,如发送消息、上锁解锁及读取信息等。
摘要由CSDN通过智能技术生成

在编写项目应用时,常常会遇到一个任务和另一个任务进行“沟通交流”的情况,在没有操作系统时,全局变量可以解决这个问题,但是如果在使用操作系统的应用中用全部变量来传递信息就会涉及到“资源管理”的问题,而且全局变量不易维护,往往逻辑复杂的程序中,无法追踪全局变量被谁使用或被谁更改。 FreeRTOS对此提供一个叫做“队列”的机制。
本文分为如下几部分:

  • 队列简介
  • 队列结构体
  • 队列创建
  • 向队列发送消息
  • 队列上锁和解锁
  • 从队列读取信息

队列简介

数据存储

队列采用先进先出(FIFO)的存储缓冲机制。数据发送到队列中会导致数据拷贝,也就是将要发送的数据拷贝到队列中,这意味着在队列中存储的是数据原始值,也就是值传递。虽然这样会浪费一点时间,但是一旦将消息发送到队列中原始的数据缓冲区就可以删除或覆写,FreeRTOS中队列传递消息虽然使用的数据拷贝,但也可以使用引用来传递消息。

多任务访问

任何任务都可以向队列中发送消息,或从队列中提取消息。

出队阻塞

当任务尝试从一个队列中读取消息的时候可以指定一个阻塞时间,这个阻塞时间就是当任务从队列中读取消息无效的时候任务阻塞的时间。
比如说队列Q是空的,这是A任务来读取,此时A又三种选择:

  1. 不等待
  2. 等待一段时间
  3. 死等

选哪一个由阻塞时间决定

入队阻塞

入队是指向队列中发送消息,将消息加入到队列中,和出队阻塞一样,当一个任务向队列中发送消息的话也可以设置阻塞时间。

队列操作过程




这里写图片描述

队列结构体

结构体定义在queue.c中:

typedef struct QueueDefinition
{
   
	int8_t *pcHead;					
	int8_t *pcWriteTo;			
	{
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值