FreeRTOS任务通知

RTOS任务通知 
任务间通信和同步 ]



描述

每个RTOS任务都有一个32位的 通知值 的  RTOS的任务通知 是直接发送到可以解锁接收任务,和任选的任务的事件 更新接收任务的通知值

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

  • 设置接收任务的通知值而不覆盖以前的值
  • 覆盖接收任务的通知值
  • 在接收任务的通知值中设置一个或多个位
  • 增加接收任务的通知值
这种灵活性允许任务通知在以前必须用于创建单独的 队列 ,  二进制信号量 ,  计数信号量  或 事件组时使用 使用直接通知解封闭RTOS任务的 速度提高45% *, 并且  使用的RAM 少于使用二进制信号解除任务的RAM

使用xTaskNotify() 和xTaskNotifyGive() API函数(及其中断安全等价函数 发送通知,并保持待处理状态,直到接收RTOS任务调用 xTaskNotifyWait()或 ulTask​​NotifyTake() API函数。如果接收RTOS任务已经被阻止,等到接收RTOS任务到达时,将从阻塞状态中删除接收RTOS任务,并清除通知。

RTOS任务通知功能默认启用,并且可以通过在FreeRTOSConfig.h中将configUSE_TASK_NOTIFICATIONS设置为0来从构建中排除(每个任务节省8个字节)


性能优点和使用限制

与其他可用于执行等效功能的FreeRTOS功能相比,任务通知具有速度和内存占用的优势。正如预期的那样,这些好处需要一些用例限制:
  1. 只有只有一个任务可以成为事件的接收者时,才能使用RTOS任务通知。然而,这种情况在大多数真实世界的应用中都能满足。

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


用途和范例

相关的API 旨在允许RTOS任务通知用作 二进制 和  计数 信号量,  事件组 以及某些情况下  队列 的更快,更轻的替代选择(在文档中称为邮箱,因为队列长度必须等于1) 。本页面底部可以找到说明如何完成的文档页面链接。

从此页:


* 使用FreeRTOS V8.1.2中的二进制信号量实现度量,使用GCC进行-O2优化编译,并且没有定义configASSERT()。使用FreeRTOS V8.2.0及更高版本中改进的二进制信号量实现仍然可以获得35%的提升。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值