stm32——freeRTOS任务通知

本文介绍了freeRTOS的任务通知功能,从概念、值的更新方式、优缺点、相关API及实操案例进行深入解析。任务通知作为轻量级同步机制,可替代二值信号量、计数信号量和事件标志组,具有快速、节省内存的特点,但也有其局限性,如只能一对一传递,中断中无法使用等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是任务通知

        freeRTOS从版本v8.2.0开始提供任务通知这个功能,每个任务都有一个32位的通知值。按照freeRTOS官方说法,使用消息通知比通过二进制信号量方式解除阻塞快45%,并且更加省内存(无需创建队列)。

        在大多数情况下,任务通知可以替代二值信号量、计数信号量、事件标志组,可以替代长度为1的队列(可以保持一个32位整数或指针值),并且任务通知速度更快,使用RAM更少。

二、任务通知值的更新方式

freeRTOS提供以下几种方式发送通知给任务:

        发送消息给任务,如果有通知未读,不覆盖通知值;

        发送消息给任务,直接覆盖通知值;

        发送消息给任务,设置通知值的一个或多个位;

        发送消息给任务,递增通知值

通过以上方式的合理使用,可以在一定场合下替代原本的队列、信号量、事件标志组等。

三、任务通知的优势和劣势

优势:

1、使用任务通知向任务发送事件或数据,比如使用队列、事件标志组或信号量快得多。

2、使用其他方法时都要先创建对应的结构体,使用任务通知时无需额外创建结构体。

劣势:

 1、只有任务可以等待通知,中断服务函数中不可以,因为中断没有TCB(任务创建会开辟一个空间)

2、通知只能一对一,因为通知必须指定任务。

3、等待通知的任务可以被阻塞,但是发送消息的任务,任何情况下都不会被阻塞等待。

4、任务通知是通过更新任务通知值来发送数据的,任务结构体中只有一个任务通知值,只能保持一个数据。

四、任务通知相关api

1、发送通知

函数
描述
xTaskNotify() 发送通知,带有通知值
xTaskNotifyAndQuery() 发送通知值,带有通知值并且保留接收任务的原通知值
xTaskNotifyGive()

发送通知,不带通知值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值