FreeRTOS中的队列特点

队列的概念

队列是只允许在一端进行插入,在另一端删除的线性表。

队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断和任务间传递信息。队列中可以存储有限的、大小固定的数据项目。任务与任务、任务与中断之间要交流的数据保存在队列中,叫做队列项目。队列所能保存的最大数据项目数量叫做队列的长度,创建队列的时候会指定数据项目的大小和队列的长度。

为什么不使用全局变量?
如果使用全局变量,兔子(任务 1 )修改了变量 a ,等待树獭(任务 3 )处理,但树獭处理速度很慢,在处理数据的过程中,狐狸(任务 2 )有可能又修改了变量 a ,导致树獭有可能得到的不是正确的数据。在这种情况下,就可以使用队列。兔子和狐狸产生的数据放在流水线上,树獭可以慢慢一个个依次处理。

RTOS中的队列的特点

1. 数据入队出队方式

通常采用先进先出( FIFO )的数据存储缓冲机制,即先入队的数据会先从队列中被读取。也可以配置为后进先出( LIFO )方式,但用得比较少。

2. 数据传递方式
采用实际值传递,即将数据拷贝到队列中进行传递,也可以传递指针,在传递较大的数据的时候
采用指针传递。
3. 多任务访问
队列不属于某个任务,任何任务和中断都可以向队列发送 / 读取消息。
4. 出队、入队阻塞

  • 出队阻塞:任务读取消息的时候指定一个阻塞时间,在此时间内,有消息就读取,没消息暂停相应时间后退出阻塞(也可以一直阻塞,也可以不阻塞)
  • 入队阻塞:与出队阻塞同理,用于发送消息


当任务向一个队列发送消息时,可以指定一个阻塞时间,假设此时队列已满无法入队。

阻塞时间如果设置为:
0:直接返回不会等待;
0~port_MAX_DELAY:等待设定的阻塞时间,若在该时间内还无法入队,超时后直接返回不
再等待;
port_MAX_DELAY:死等,一直等到可以入队为止。出队阻塞与入队阻塞类似;
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值