FreeRTOS学习笔记之消息队列Queue

本文详细介绍了FreeRTOS中的消息队列概念、在任务间和中断服务程序中的实现方式,以及相关的API函数,如xQueueSend和xQueueReceive,强调了其在多任务管理和通信中的优势和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        消息队列Queue是FreeRTOS 一个重要的通信机制

1、概念及作用

        消息队列是通过RTOS内核提供服务,任务或中断服务子程序可以将一个消息(注意,FreeRTOS消息队列传递的是实际数据,并不是数据地址,RTX,uCOS-II 和uCOS-III是传
递的地址)放入到队列。同样,一个或者多个任务可以通过RTOS内核服务从队列中得到消息。通常,先进入消息队列的消息先传给任务,也就是说,任务先得到的是最先进入到消息队列的消息,即先进先出的原则(FIFO),FreeRTOS的消息队列支持FIFO和LIFO两种数据存取方式。
        也许有不理解的初学者会问采用消息队列多麻烦,搞个全局数组不是更简单,其实不然。在
裸机编程时,使用全局数组的确比较方便,但是在加上RTOS 后就是另一种情况了。相比消息队列,使用全局数组主要有如下四个问题:
        1)使用消息队列可以让RTOS内核有效地管理任务,而全局数组是无法做到的,任务的超时等机制需要用户自己去实现。
        2)使用了全局数组就要防止多任务的访问冲突,而使用消息队列则处理好了这个问题,用户无需担心。
        3)使用消息队列可以有效地解决中断服务程序与任务之间消息传递的问题。
        4)FIFO 机制更有利于数据的处理。

2、任务间消息队列的实现

        任务间消息队列的实现是指各个任务之间使用消息队列实现任务间的通信。
运行条件:
        1)创建消息队列;
        2)创建2个任务Task1和Task2,任务Task1向消息队列放数据,任务Task2从消息队列取数据;
        3)FreeRTOS的消息存取采用FIFO方式;任务Task1向消息队列放数据,任务Task2从消息队列取数据,运行过程主要有以下两种情况:
  • 如果数据的速度快于数据的速度,那么会出现消息队列存放满的情况,FreeRTOS的消息存函数xQueueSend
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡尔二叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值