本章主要介绍了 RTOS 系统中数据传递的机制。根据数据传递的目的,可以分为同步、消息通信两种。其中同步是指协调程序运行的先后顺序,消息通信是指传递一块数据。
通信组件的演变是随着功能进行改善的。不管是同步、还是消息通信,我们总是以全局变量说起,依次介绍 RTOS 中如何根据不同的场景选择不同的通信组件。
同步组件的发展历程可以概述为:
1)全局变量
2)为实现等待-通知机制、以及读写保护->二值信号量
3)为处理信号积压->计数信号量
4)为处理多个事件,识别数据发送方->事件组
5)为详细说明同步信号的具体内容->队列(邮箱)
除此在外,我们还介绍了保证数据通信可靠性的双向同步示例,以及设计同步关系时可能出现的环路死锁问题-。读者朋友们可以在设计系统程序时,选择和使得通信组件,同时考虑当前的通信关系是使用单向同步还是双向同步,是否会出现环路同步问题等。
数据传递的发展历程可以概述为:
1)全局变量
2)实现等待-通知机制,通过缓存机制处理数据覆盖问题,允许多个数据发送方-接收方->队列
3)单个发送方-单个接收方场景下,发送变长数据,并指定触发唤醒等待任务的数据长度的机制->streambuf
4)单个发送方-单个接收方场景下,发送具备固定格式的变长数据->messagebuf
5)多个发送方-多个接收方场景下,发送变长数据,增加管理数据覆盖(溢出)机制->ringbuf
6)实现同时监控多个信号量、队列、ringbuf的机制->queuesets(队列集)
读者们回顾上述章节的介绍和代码。掌握本章节的内容后就可以较为轻松地处理任务之间的同步、通信关系了。同时本章也是后续章节的基础,我们将在下述章节对应用这些内容作更深入的讨论。
1)Learning-FreeRTOS-with-esp32 系列博客介绍
2)下一篇:RTOS 中 Task 之间资源共享示例