STM32 FreeRTOS任务通知

目录

任务通知的简介

任务通知相关API函数介绍


任务通知的简介

任务通知是 FreeRTOS 中一种用于任务间通信的机制,它允许一个任务向其他任务发送简单的通知或信号,以实现任务间的同步和协作。任务通知通常用于替代二值信号量或事件标志组,提供了更轻量级的任务间通信方式。

大多数任务间通信方法通过中间对象,如队列、信号量或事件组。发送任务写入通信对象,接收任务从通信对象读取。当使用直接任务通知时,顾名思义,发送任务直接向接收任务发送通知,而无需中间对象。

通过中间对象进行通信

无需中间对象进行通信

每个 RTOS 任务都有一个任务通知组,每条通知均独立运行,都有"挂起"或"非挂起"的通知状态,以及一个 32 位通知值。常量 configTASK_NOTIFICATION_ARRAY_ENTRIES 可设置任务通知组中的索引数量。在 FreeRTOS V10.4.0 版本前,任务只有单条任务通知(即只能一对一),没有任务通知组。

向任务发送"任务通知" 会将目标任务通知设为"挂起"状态------相当于短信未读状态。 正如任务可以阻塞中间对象 (如等待信号量可用的信号量),任务也可以阻塞任务通知, 以等待通知状态变为"挂起"。向任务发送"任务通知"也可以更新目标通知的值(可选),可使用下列任一方法:

  • 覆盖原值,无论接收任务是否已读取被覆盖的值。
  • 覆盖原值(仅当接收任务已读取被覆盖的值时)。
  • 在值中设置一个或多个位。
  • 对值进行增量(添加 1)。

RTOS 任务通知功能默认为启用状态,将configUSE_TASK_NOTIFICATIONS 设为0可以禁用。

任务通知相关API函数介绍

任务通知相关函数如下:

|------------------------------|-------------------------|
| 函数 | 描述 |
| xTaskNotify() | 发送通知,带有通知值 |
| xTaskNotifyAndQuery() | 发送通知,带有通知值并且保留接收任务的原通知值 |
| xTaskNotifyGive() | 发送通知,不带通知值 |
| xTaskNotifyFromISR() | 在中断中发送任务通知 |
| xTaskNotifyAndQueryFromISR() | 在中断中发送任务通知 |
| vTaskNotifyGiveFromISR() | 在中断中发送任务通知 |
| ulTaskNotifyTake() | 获取任务通知,可选退出函数时对通知值清零或减1 |
| xTaskNotifyWait() | 获取任务通知,可获取通知值和清除通知值的指定位 |

注意:发送通知有相关ISR函数,接收通知没有ISR函数,不能在ISR中接收任务通知。

相关推荐
charlie1145141911 小时前
从0开始的构建的天气预报小时钟(基于STM32F407ZGT6,ESP8266 + SSD1309)——第2章——构建简单的ESP8266驱动
stm32·单片机·物联网·学习·c·esp8266
zhmc2 小时前
Cortex-M系列MCU的位带操作
单片机·嵌入式硬件
旅行的橘子汽水4 小时前
【嵌入式-stm32电位器控制以及旋转编码器控制LED亮暗】
stm32·单片机·嵌入式硬件
Zevalin爱灰灰4 小时前
面试可能会遇到的问题&回答(嵌入式软件开发部分)
stm32·单片机·面试·操作系统·嵌入式·ucos
【云轩】4 小时前
《信号革命:从模拟到数字的通信进化史诗》
人工智能·嵌入式硬件·语音识别
lzb7595 小时前
积分赛——读取实时时间
单片机
基极向上的三极管6 小时前
【51单片机】2-5【I/O口】433无线收发模块控制继电器
单片机·51单片机
最后一个bug8 小时前
PCI与PCIe接口的通信架构是主从模式吗?
linux·开发语言·arm开发·stm32·嵌入式硬件
古希腊掌握嵌入式的神8 小时前
[CH32] RISC-V汇编指令解释
单片机·嵌入式硬件
XINVRY-FPGA9 小时前
Xilinx FPGA XCVC1902-2MSEVSVA2197 Versal AI Core系列芯片的详细介绍
人工智能·嵌入式硬件·5g·ai·fpga开发·云计算·fpga