FreeRTOS_任务通知的学习与使用

本文介绍了在STM32F103ZET6开发板上使用FreeRTOS的任务通知功能,对比了任务通知与其他通信机制如队列、信号量和事件组的优缺点。实验通过中断触发ADC转换,利用任务通知传递数据,展示了任务通知如何作为二值信号量和计数信号量的替代品。此外,还提供了相关函数的详细说明和实验代码,演示了任务通知在不同场景下的应用。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

本次实验是验证任务通知,一共分为两个实验。

任务通知是FreeRTOS的一种进程间的通讯技术。使用任务通知可以不用向之前那样创建中间变量,可以直接从任务到任务或者从ISR向任务发送通知。

本次实验采用STM32F103ZET6主芯片的开发板,使用HAL库开发。

任务通知的特点

优点

效率更高:使用任务通知来发送事件、数据给某个任务时,效率更高。比队列、信号量、事件组都有大的优势。

更节省内存:使用其他方法时都要先创建对应的结构体,使用任务通知时无需额外创建结构体。只使用一个uint32_t类型的变量

缺点

不能发送数据给ISR:ISR并没有任务结构体,所以无法使用任务通知的功能给ISR发送数据。但是ISR可以使用任务通知的功能,发数据给任务。

数据只能给该任务独享:使用队列、信号量、事件组时,数据保存在这些结构体中,其他任务、ISR都可以访问这些数据。使用任务通知时,数据存放入目标任务中,只有它可以访问这些数据。

无法缓冲数据:使用任务通知时,任务结构体中只有一个任务通知值,只能保持一个数据。

无法广播给多个任务:使用事件组可以同时给多个任务发送事件。但是使用任务通知,只能发个一个任务。

如果发送受阻,发送方无法进入阻塞状态等待:使用任务通知时,即使对方无法接收数据,发送方也无法阻塞等待,只能即刻返回错误。

使用任务通知可以代替信号量和事件组,也可以代替只有一个uint32_t类型存储单元的队列。

任务通知相关函数

发送相关函数

函数

描述

xTaskNotify()

发送通知,带有通知值并且不保留接收任务原通知值,用在任务中。

xTaskNotifyFromISR()

发送通知,函数xTaskNotify()的中断版本。

xTaskNotifyGive()

发送通知,不带通知值并且不保留接收任务的通知值,此函数会将接收任务的通知值加一,用于任务中。

vTaskNotifyGiveFromISR()

发送通知,函数xTaskNotifyGive()的中断版本。

xTaskNotifyAndQuery()

发送通知,带有通知值并且保留接收任务的原通知值,用在任务中。

XTaskNotiryAndQueryFromISR()

发送通知,函数xTaskNotifyAndQuery()

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值