讲师博文
FreeRTOS 任务通知(Task Notification)与其他通信方式对比 来源 : 华清远见     2026-08-26

概述

操作系统提供的“多任务调度”能力可以说是最吸引程序员的一点,不管是单片机用的RTOS还是高级MCP用的完整操作系统无一列外都支持。借助多任务并发能力程序员可以将复杂的业务进行解耦,实现软件的模块化设计,提高软件的稳定性和可维护性。尤其是像linux、windows等,甚至提供进程内存虚拟化技术,更是将进程安全性做到极致。但任何事情都有两面性,分离成多个任务后必然涉及到沟通不便,而为了沟通,操作系统不得不提供解决方案。下边是FreeRTOS提供的经典方案:

队列(Queue)

如图所示,队列是一个完全独立于任务的一个外部对象, 任务间通信不管是一堆多还是多对一。基本流程是建立一个队列后,发送方向队列推送信息,接收方从中出队信息。优势:

1.可传递多个数据;

2.数据类型任意;

3.可双向传输;

4.支持多个任务读取;

5.可缓存数据;

信号量(Semaphore)

如图所示,信号量也是一个完全独立于任务的一个外部对象,像一个变量一样同步各个任务的运作,当然他支持阻塞的功能。优势:

1.资源不够可阻塞任务;

2.只是一个变量操作效率高;

事件组(Event Group)

如图所示,事件组依然是一个完全独立于任务的一个外部对象,由内核维护,同故宫多个bit控制任务的运作,当然它不支持缓存和多值。优势:

1.可协调多个任务;

2.Bit位内存占用少;

任务通知(Task Notification)

如图所示任务通知比其他通信都更加轻量化,直接在进程控制块PCB中存在, 不用内核专门维护数据。但的确也有些劣势,比如无法缓存,不能多任务共享等。

总结

如果你需要“多对多”广播,或者需要缓存多个数据,只能选队列/事件组。

如果你只是“甲通知乙” 做同步,或者传递一个简单的状态值,坚决用任务通知,它会让你省下大量RAM并显著提升响应速度。

扫码申领本地嵌入式教学实录全套视频及配套源码

上一篇:深度学习中的损失函数与优化算法基础知识

下一篇:图像预处理技术综述:为什么算法训练前必须处理图像

400-611-6270

Copyright © 2004-2026 华清远见教育科技集团 版权所有
京ICP备16055225号-5京公海网安备11010802025203号