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

相关推荐
凌盛羽7 分钟前
在STM32G030xx的HAL库中使用DMA采集ADC多通达数据并开启DMA开启全满和半满中断
数据结构·stm32·单片机·嵌入式硬件·链表·嵌入式实时数据库
IT阳晨。1 小时前
【STM32】RTC的使用和实时时钟项目
stm32·单片机·嵌入式硬件
国科安芯1 小时前
车规MCU在农业无人机电机驱动中的可靠性分析
单片机·嵌入式硬件·性能优化·无人机·安全威胁分析·安全性测试
TangDuoduo00051 小时前
【UART控制器HAL库常用接口】
单片机·嵌入式硬件
List<String> error_P1 小时前
STM32数据手册速查
stm32·单片机·嵌入式硬件
dlz08361 小时前
GPIO的通用初始化流程
单片机·嵌入式硬件
boneStudent3 小时前
Day18:系统滴答定时器 (SysTick)
stm32·单片机·嵌入式硬件
d111111111d3 小时前
再STM32F103C8T6中小端存储和大端存储有什么不同,STM32F103C8T6用的是那个,为什么要这么使用?
笔记·stm32·单片机·嵌入式硬件·学习
云山工作室3 小时前
基于物联网的体温心率监测系统设计(论文+源码)
stm32·单片机·嵌入式硬件·物联网·课程设计
猫猫的小茶馆3 小时前
【ARM】VSCode和IAR工程创建
c语言·开发语言·arm开发·ide·vscode·stm32·嵌入式硬件