第八章 任务通知

FreeRTOS任务通知提供了一种高效的方式来解除任务阻塞,相较于队列、信号量和事件标志组有速度和内存优势。本文介绍了如何使用任务通知模拟二值信号量、计数信号量和事件,以及相关的函数如vTaskNotifyGiveFromISR、ulTaskNotifyTake等,并提到了使用限制。
摘要由CSDN通过智能技术生成

官网:https://www.freertos.org/RTOS-task-notifications.html

从v8.2 版本开始的,

 

RTOS的每个任务都有一个32位通知值, 在创建RTOS任务时初始化为零,任务控制块中的成员变量ulNotifiedValue就是这个通知值。

向这个接受任务发送任务通知以后,就会解除这个任务的阻塞状态。

任务通知可以通过以下方式更新接收任务的通知值:

  • 设置接收任务的通知值而不覆盖以前的值

  • 覆盖接收任务的通知值

  • 在接收任务的通知值中设置一个或多个位

  • 增加接收任务的通知值

 

合理、灵活的使用上面这些更改任务通知值的方法可以在一些场合中替代队列、二值信号量、计数信号量和事件标志组。使用任务通知来实现二值信号量功能的时候,解除任务阻塞的时间比直接使用二值信号量要快45%,并且使用的RAM更少。

性能优势和使用限制

与可用于执行等效功能的其他FreeRTOS功能相比,任务通知具有速度和RAM占用空间优势。正如所料,这些好处需要一些用例限制:

  1. 只有当一个任务可以成为事件的接收者时,才能使用RTOS任务通知。然而,在大多数现实世界的应用中满足了这种条件。

  2. 仅在使用RTOS任务通知代替队列的情况下; 虽然接收任务可以等待处于阻止状态的通知(因此不消耗任何CPU时间),但是如果发送无法立即完成,则发送任务无法在阻塞状态下等待发送完成。

<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值