FreeRTOS 队列
[另请参阅阻塞多个 RTOS 对象]
队列是任务间通信的主要形式。 它们可以用于在任务之间以及中断和任务之间发送消息。
在大多数情况下,它们作为线程安全的 FIFO(先进先出)缓冲区使用,新数据被发送到队列的后面,
尽管数据也可以发送到前面。
向队列中写入和从队列中读取。 在此示例中,队列被创建来容纳 5 个项目,
并且队列从不会满。
用户模型:最大的简单性和灵活性……
FreeRTOS 队列使用模型既简单又灵活,
这两者通常是不可兼得的。 消息通过队列以副本的方式发送,
这意味着数据(可以是更大的缓冲区的指针)本身被复制到队列中,
而不是队列始终只存储对数据的引用。 这是最好的方法,因为:
FreeRTOS 教程书籍
提供更多信息,包括队列、二进制信号量量、互斥锁、计数信号量、
递归信号量,以及包含在配套的示例项目中的简单示例。
阻塞队列
队列 API 函数允许指定阻塞时间。
当一个任务试图从一个空队列中读取时,该队列将
进入阻塞状态(因此它不会消耗任何 CPU 时间,且其他任务可以运行)
直到队列中的数据变得可用,或者阻塞时间过期。
当一个任务试图写入到一个空队列时,该队列将
进入阻塞状态(因此它不会消耗任何 CPU 时间,且其他任务可以运行)
直到队列中出现可用空间,或者阻塞时间过期。
如果同一个队列上有多个处于阻塞状态的任务,
那么具有最高优先级的任务将最先解除阻塞。
参见用户文档的队列管理部分,获取所有与队列相关的 API
函数。 请搜索 FreeRTOS/Demo/Common/Minimal 目录下的文件,您将会看到它们的多个用法示例。
请注意,中断只能使用以 "FromISR" 结尾的 API 函数。
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.