文章主要讲解如何创建和使用队列。
消息队列浅析:
一个或者多个任务可以通过 RTOS 内核服务从队列中得到消息,通常先进入消息队列的消息先传
给任务,即先进先出的原则(FIFO),FreeRTOS 的消息队列支持 FIFO 和 LIFO 两种数据存取方式。
相比消息队列,使用全局数组主要有如下四个问题:
a、使用消息队列可以让 RTOS 内核有效地管理任务,而全局数组是无法做到的,任务的超时等机制需要用户自己去实现
b、使用全局数组需要防止多任务的访问冲突,而使用消息队列则处理好了这个问题,用户无需担心
c、使用消息队列可以有效地解决中断服务程序与任务之间消息传递的问题
d、FIFO 机制更有利于数据的处理
任务间消息队列
该消息队列可以存放 10 个消息:
创建 2 个任务 Task1 和 Task2,任务 Task1 向消息队列放数据,任务 Task2 从消息队列取数据。
FreeRTOS 的消息存取采用 FIFO 方式,运行过程主要有以下两种情况:
a、放数据的速度快于取数据的速度
会出现消息队列存放满的情况,FreeRTOS 的消息存放函数 xQueueSend 支持超时等待,用户可以设置超时等待,直到有空间可以存放消息或者设置的超时时间溢出。
b、放数据的速度慢于取数据的速度
会出现消息队列为空的情况,FreeRTOS 的消息获取函数 xQueueReceive 支持超时等待,用户可以设置超时等待,直到消息队列中有消息或者设置的超时时间溢出。