FreeRTOS学习:消息队列

堆是向上生长,栈是向下生长。 

队列简介

队列介绍

        队列是一种任务到任务、任务到中断、中断到任务数据交流的一种机制,简单来说就是用来传递消息的。

在裸机中虽然我们用全局变量也可以进行传递消息,但是由于FreeRTOS我们创建多个任务时,全局变量会出现在其他任务中修改的问题,也就是数据是无保护易受损的

通过读写队列进行消息传递的话,FreeRTOS对读写队列已经做好了保护,可以防止多任务同时访问的冲突(其实就是加入了临界区)。

基于队列, FreeRTOS 实现了多种功能,其中包括队列集互斥信号量计数型信号量二值信号量递归互斥信号量。

队列示意图如下,

 创建队列时,需要规定队列的长度和每个队列项目的大小。

队列特点

  • 数据入队出队:队列通常采用 FIFO(先进先出)的存储缓冲机制,,先入队的先读出(First Input First Output),当然也可以配置成LIFO方式。
  • 数据传递:FreeRTOS采用实际值传递,也就是拷贝数据传递,当然,也可以传递指针(传递大数据)。
  • 多任务访问:队列不属于某个特定的任务,可以在任何的任务或中断中往队列中写入消息,或者从队列中读取消息。
  • 出入队阻塞:在任务从队列读取消息时,可以指定一个阻塞超时时间,出入队阻塞相似
    •  阻塞时间为0:直接返回不等待   
    •  阻塞时间0-port_MAX_DELAY:等待设定的阻塞时间,超时直接返回
    •  阻塞时间port_MAX_DELAY:死等,一直等到入队为止   

备注:当多个任务给一个满队列写数据,优先级高的先进入就绪态,优先级相同的话,等待时间最久的任务进入就绪态。(出队时也一样)

队列操作过程 

队列操作过程分为四步,如下,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值