FreeRTOS消息队列

一、简介

      1、  队列是任务到任务、任务到中断、中断到任务数据交流的一种机制(消息传递)

       2、 在OS中如果使用全局变量存在弊端:数据无保护,导致数据不安全,当多个任务同时
对该变量操作时,数据易受损

        3、队列:读写队列做好了保护,防止多任务同时访问冲突;我们只需要直接调用API函数
即可,简单易用
        4、FreeRTOS基于队列, 实现了多种功能,其中包括队列集、互斥信号量、计数型信号量、二值信号量、 递归互斥信号量,因此很有必要深入了解 FreeRTOS 的队列

        5特点:

           (1、队列通常采用“先进先出”(FIFO)的数据存储缓冲机制,即先入队的数据会先从队 列中
被读取,FreeRTOS中也可以配置为“后进先出”LIFO方式;

           (2、FreeRTOS中队列采用实际值传递,即将数据拷贝到队列中进行传递, FreeRTOS采用拷贝数据传递,也可以传递指针,所以在传递较大的数据的时候采用指针传递

           (3、队列不属于某个任务,任何任务和中断都可以向队列发送消息 以及 读取消息
           (4、当任务向一个队列发送消息时,可以指定一个阻塞时间,假设此时当队列已满无法入队(0~port_MAX_DELAY:不等待~死等)

二、使用

        1.使用队列的主要流程:创建队列 -->写队列 --> 读队列
        2.创建队列API函数
                (1、动态方式创建队列:xQueueCreate()
                (2、静态方式创建队列:xQueueCreateStatic()      ps:此方法需手动分配队列空间
                 动态和静态创建队列之间的区别:队列所需的内存空间由 FreeRTOS 从 FreeRTOS 管
理的堆中分配,而静态创建需要用户自行分配内存。

        3.写队列API函数

                往队列的尾部写入消息:xQueueSend()
                往队列的尾部写入消息:xQueueSendToBack()
                往队列的头部写入消息:xQueueSendToFront()
                覆写队列消息(只用于队列长度为 1 的情况):xQueueOverwrite()        

         4.读队列API函数

                从队列头部读取消息,并删除消息:xQueueReceive()
                从队列头部读取消息:xQueuePeek()
                在中断中从队列头部读取消息,并删除消息:xQueueReceiveFromISR()
                在中断中从队列头部读取消息:xQueuePeekFromISR()

笔记内容来自正点原子

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值