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中接收任务通知。

相关推荐
长安第一美人13 小时前
算能 BM1688 低延迟推流:Qt+WebSocket 直出 H5/HDMI
开发语言·网络·嵌入式硬件·websocket·交互
yongui4783414 小时前
STM32 三相电机FOC驱动方案(三电阻单电阻双模式)
stm32·单片机·嵌入式硬件
WeeJot嵌入式14 小时前
【串口】初始串口-轮询模式
stm32·单片机·嵌入式
yong999015 小时前
基于 51 单片机配合霍尔传感器实现计数 + 转速测量
单片机·嵌入式硬件
崇山峻岭之间15 小时前
单片机时钟配置01
单片机·嵌入式硬件
LongRunning16 小时前
【BLE】STM32WB55_资料链接(八)
stm32
踏着七彩祥云的小丑16 小时前
嵌入式——面试题
单片机·嵌入式硬件
椰羊~王小美17 小时前
STM32加密
stm32·单片机·嵌入式硬件
Wave84517 小时前
STM32 启动模式与固件更新机制 (底层深度解析)
stm32·单片机·嵌入式硬件
EVERSPIN17 小时前
国产异步SRAM单片机外扩专用存储芯片
单片机·嵌入式硬件·sram·国产sram·异步sram·国产异步sram