Arduino与FreeRTOS-FreeRTOS队列管理

FreeRTOS队列管理

在上一篇文章Arduino与FreeRTOS-FreeRTOS配置与简单任务创建中,已经了解了 FreeRTOS 与 Arduino的任务管理过程。 在本文中,我们将学习如何使用 FreeRTOS API 创建队列。 单个任务无法创建一个高效且完整的应用程序。 因为这些独立的任务是具有自己的堆栈、内存和执行作业的较小程序。 因此,很明显我们需要一种机制让这些自主任务相互通信。 以便他们可以相互共享数据或消息。

与其他现代 RTOS 内核一样,FreeRTOS 内核也提供了任务间数据通信的过程。 这些被称为消息队列。 它们是所有 FreeRTOS 通信和同步机制使用的底层原语。 它们用于在任务之间发送和接收消息。

1、队列介绍

消息队列是一种保存固定大小数据项的 FIFO 缓冲区。 此外,队列可以容纳的项目数在初始化后也是固定的。 通常,任务将数据写入缓冲区的末尾并从缓冲区的前端读取。 但是也可以在前端写。 多个作者和读者可以从缓冲区写入和读取。

但是一次只有一个写入者/读取者可以访问缓冲区,而其他任务保持阻塞。 因此,在读取和写入缓冲区时都可能发生阻塞。

1)阻塞队列读取

在以下情况下可能阻止读取:

  • A)如果多个任务准备从消息队列接收数据,则优先级最高的任务先读取数据,优先级最低的任务最后读取数据。 同时,其他任务保持阻塞。 我们还可以在发送读取请求时指定任务的最大阻塞时间。 但是不同的任务也可以有不同的阻塞时间。
  • B)另一种可能的情况是队列为空。 在这种情况下,所有读取请求都会进入阻塞状态。
上一篇:FreeRtos的软件定时器的使用


下一篇:FreeRTOS+EmWIN抖屏