FreeRTOS任务通知作邮箱(队列)

本文深入探讨了FreeRTOS中的任务通知功能,包括其特点、限制及使用方法。任务通知可作为轻量级队列,用于在任务间发送32位数据,通过特定API实现数据的发送与读取,适用于嵌入式系统的实时通信。

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

关于任务通知特点、优缺点:FreeRTOS任务通知

关于队列:FreeRTOS队列

特性

任务通知可以被用于向任务发送数据,但是有许多限制:

  1. 仅仅只能发送32位数据;
  2. 发送的数据保存在接收任务通知值里面,任务时刻只有一个任务通知值。

因此“轻量级的邮箱”也可以被用作“轻量级的队列”,任务通知的值就是邮箱值。

使用xTaskNotify()和xTaskNotifyFromISR()发送数据,参数eAction只能在eSetValueWithOverwrite和eSetValueWithoutOverwrite中取值。

如果eAction被设置为eSetValueWithOverwrite,那么接收任务的通知值将被更新,即使接收任务已经有了一个挂起的通知。如果eAction被设置为eSetValueWithoutOverwrite,那么接收任务的通知值只有在接收任务还没有挂起通知时才会更新——因为更新通知值会在接收任务处理之前覆盖之前的值。

任务使用xTaskNotifyWait()读取自己的任务通知值。

API说明

BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify,
                         uint32_t ulValue, 
                         eNotifyAction eAction )
//向任务发送任务通知
//xTaskToNotify :是任务句柄
//ulValue :任务通知值
//eAction :发送任务通知值的方式,用于邮箱功能只能取eSetValueWithOverwrite或eSetValueWithoutOverwrite

BaseType_t xTaskNotifyFromISR( TaskHandle_t xTaskToNotify, 
                               uint32_t ulValue, 
                               eNotifyAction eAction, 
                               BaseType_t *pxHigherPriorityTaskWoken );
//向任务发送任务通知,用于中断

BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry,
                            uint32_t ulBitsToClearOnExit, 
                            uint32_t *pulNotificationValue, 
                            TickType_t xTicksToWait );
//读取任务通知值
//ulBitsToClearOnEntry :表示读取之前是否清除,设置为0xffffffff将会清除
//ulBitsToClearOnExit :表示读取之后是否清楚,设置为0xffffffff将会清除
//pulNotificationValue :任务通知值
//xTicksToWait :阻塞时间

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

freemote

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值