任务通知相关的 API 函数详解

FreeRTOS 中的 任务通知(Task Notification) 是一种轻量级的高效通信机制,允许任务之间或中断直接向特定任务发送事件或数据。相比队列、信号量等传统机制,任务通知具有 更快的速度和更低的内存开销(无需额外创建对象),但功能相对受限(如仅支持单向通信)。以下是任务通知相关的 API 函数详解及使用指南。


任务通知的核心特性

  1. 轻量高效:每个任务自带通知值(32位),无需额外内存分配。
  2. 多种模式:支持数值更新、事件标志位、计数器等多种操作模式。
  3. 直接通信:可直接指定目标任务,无需中间对象(如队列)。
  4. 适用场景
    • 替代二值信号量/计数信号量。
    • 轻量级事件标志组。
    • 单次数据传输(类似轻量队列)。

任务通知 API 函数详解

1. 发送任务通知
基础发送函数
BaseType_t xTaskNotify(
    TaskHandle_t xTaskToNotify, // 目标任务句柄
    uint32_t ulValue,           // 通知值(或掩码)
    eNotifyAction eAction       // 操作类型
);
  • 功能:向指定任务发送通知,并根据 eAction 更新目标任务的通知值。
  • 参数
    • eAction:指定更新方式,可选:
      • eNoAction:仅触发通知,不修改通知值。
      • eSetBits:按位或(ulValue 为掩码)。
      • eIncrement:通知值加 1(ulValue 被忽略)。
      • eSetValueWithOverwrite:直接覆盖通知值。
      • eSetValueWithoutOverwrite:仅当通知值未被读取时覆盖。
  • 返回值
    • pdPASS:发送成功(某些模式下可能返回失败,如 eSetValueWithoutOverwrite 时通知值已存在)。
中断安全版本
BaseType_t xTaskNotifyFromISR(
    TaskHandle_t xTaskToNotify,
    uint32_t ulValue,
    eNotifyAction eAction,
    BaseType_t *pxHigherPriorityTaskWoken
);
  • pxHigherPriorityTaskWoken:标记是否需触发上下文切换(调用 portYIELD_FROM_ISR())。
简化发送函数(类似信号量)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九层指针

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值