FreeRTOS笔记篇:第九章 -- 任务通知

测试环境如下

stm32F103C8T6
MDK keil5
stm32cube + FreeRTOS

概述

已经看到,使用FreeRTOS的应用程序被构造为一组独立的任务,并且这些自治任务很可能必须相互通信,以便它们能够提供有用的系统功能。

这本书已经描述了各种任务可以相互交流的方式。 迄今为止所描述的方法要求创建通信对象。 通信对象的例子包括队列、事件组和各种不同类型的信号量。

当使用通信对象时,事件和数据不是直接发送到接收任务或接收ISR,而是发送到通信对象。 同样,任务和ISR从通信对象接收事件和数据,而不是直接从发送事件或数据的任务或ISR接收。 如图76所示。
在这里插入图片描述

任务通知-指向任务通信

“任务通知”允许任务与其他任务交互,并与ISR同步,而不需要单独的通信对象。 通过使用任务通知,任务或ISR可以直接向接收任务发送事件。 如图77所示。

本章旨在让读者对:有一个很好的认识:

  • 任务的通知状态和通知值
  • 如何和何时可以使用任务通知代替通信对象,例如信号量
  • 使用任务通知代替通信对象的优点

任务通知;好处和限制

使用任务通知向任务发送事件或数据的性能好处明显快于使用队列、信号量或事件组执行等效操作

优点:
同样,使用任务通知向任务发送事件或数据比使用队列、信号量或事件组执行等效操作需要更少的RAM。 这是因为每个通信对象(队列、信号量或事件组)必须在使用之前创建,而启用任务通知功能的固定开销仅为每个任务8字节的RAM。

限制:
任务通知比通信对象更快,使用的RAM更少,但任务通知不能在所有场景中使用。 本节记录不能使用任务通知的场景:

  • 将事件或数据发送到ISR通信对象可用于将事件和数据从ISR发送到任务,并从任务发送到ISR。 任务通知可以用于将事件和数据从ISR发送到任务,但不能用于将事件或数据从任务发送到ISR。
  • 启用多个接收任务,任何知道其句柄(可能是队列句柄、信号量句柄或事件组句柄)的任务或ISR都可以访问通信对象)。 任何数量的任务和ISR都可以处理发送到任何给定通信对象的事件或数据。 任务通知直接发送到接收任务,因此只能由发送通知的任务处理。 然而,在实际情况下,这很少是一个限制,因为虽然有多个任务和ISR发送给SAM是常见的
  • 缓冲多个数据项A队列是一个通信对象,一次可以容纳多个数据项。 已发送到队列,但尚未从队列接收到的数据在队列对象内部缓冲。 任务通知通过更新接收任务的通知值向任务发送数据。 任务的通知值一次只能持有一个值
  • 广播到多个任务一个事件组是一个通信对象,可以用来一次向多个任务发送一个事件。 任务通知直接发送到接收任务,因此只能由接收任务处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值