27-任务通知

本文详细介绍了FreeRTOS从V8.2.0版本开始引入的任务通知功能,包括任务控制块的结构,发送和接收任务通知的API函数(如xTaskGenericNotify、ulTaskNotifyTake和xTaskNotifyWait),以及中断中使用的通知函数。这些功能可以替代传统信号量和队列,提高任务间的通信效率。
摘要由CSDN通过智能技术生成

任务通知

  • 什么是任务通知

FreeRTOS 从 V8.2.0 版本开始提供任务通知这个功能,每个任务都有一个 32 位的通知值,在大多数情况下,任务通知可以替代二值信号量、计数信号量、事件组,也可以替代长度为 1 的队列(可以保存一个 32位整数或指针值)。

configUSE_TASK_NOTIFICATIONS 设置为 1。

任务通知的控制块

这个任务控制块的结构体与任务创建的结构是一样的。

相当于在创建任务的时候,任务通知也相对应的创建了

  1. 任务通知的值,可以保存一个32位的整数值,也可以是一个指针
  2. 用于任务通知的状态,用于标志任务是否在等待通知

  • API函数

发送任务通知函数

xTaskGenericNotify()  发送任务通知函数(这是通用的在任务中发送任务通知的API函数)

下边的三个函数只是是更新值得方式不同

xTaskNotifyGive()

xTaskNotify()

xTaskNotifyAndQuery()

xTaskNotifyAndQuery() 比xTaskNotify() 多了一个参数(用于回传上一个通知值)

(获取)接收任务通知函数

ulTaskNotifyTake() 主要用于二值信号量和计数信号量得使用

xTaskNotifyWait()  用于通用型得全功能得获取任务通知(消息队列,二值信号量、计数信号量、事件组)

发送任务通知函数 xTaskGenericNotify()

  1. 被通知的任务的句柄,发送给谁,就是谁的任务句柄
  2. 发送的通知值
  3. 一个枚举类型,指定更新值的一个类型,可以看最上边的任务通知的介绍里边的
  4. 用于任务原本的通知值得保存,可以传入一个变量,来保存原本的任务通知值

中断中发送任务通知通用函数 xTaskGenericNotifyFromISR()

xTaskNotifyGive() 可以用于二值信号量或计数信号量得一种轻量级得应用

对象任务在等待通知得时候要用take,而不是使用wait

可以看到是一个宏定义,引用的是通用得那个函数

vTaskNotifyGiveFromISR()

vTaskNotifyGiveFromISR()是 vTaskNotifyGive()的中断保护版本

xTaskNotify()  当成事件组来使用

下边这是最后一个参数可取得值

xTaskNotifyFromISR()

xTaskNotifyFromISR()是 xTaskNotify()的中断保护版本。

xTaskNotifyAndQuery()

xTaskNotifyAndQueryFromISR()

接收任务通知函数

ulTaskNotifyTake()

主要用于二值信号量和计数信号量

xTaskNotifyWait()

通用得全功能的获取任务通知

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值