官网:https://www.freertos.org/RTOS-task-notifications.html
从v8.2 版本开始的,
RTOS的每个任务都有一个32位通知值, 在创建RTOS任务时初始化为零,任务控制块中的成员变量ulNotifiedValue就是这个通知值。
向这个接受任务发送任务通知以后,就会解除这个任务的阻塞状态。
任务通知可以通过以下方式更新接收任务的通知值:
-
设置接收任务的通知值而不覆盖以前的值
-
覆盖接收任务的通知值
-
在接收任务的通知值中设置一个或多个位
-
增加接收任务的通知值
合理、灵活的使用上面这些更改任务通知值的方法可以在一些场合中替代队列、二值信号量、计数信号量和事件标志组。使用任务通知来实现二值信号量功能的时候,解除任务阻塞的时间比直接使用二值信号量要快45%,并且使用的RAM更少。
性能优势和使用限制
与可用于执行等效功能的其他FreeRTOS功能相比,任务通知具有速度和RAM占用空间优势。正如所料,这些好处需要一些用例限制:
-
只有当一个任务可以成为事件的接收者时,才能使用RTOS任务通知。然而,在大多数现实世界的应用中满足了这种条件。
-
仅在使用RTOS任务通知代替队列的情况下; 虽然接收任务可以等待处于阻止状态的通知(因此不消耗任何CPU时间),但是如果发送无法立即完成,则发送任务无法在阻塞状态下等待发送完成。