FreeRTOS(8)----任务通知

一,任务通知的简介

相对于之前的信号量,事件组等,所谓的任务通知核心就是一个32位的无符号整数和8位的通知状态

任务通知可以通过如下方法更新接收任务的通知值:
● 不覆盖接收任务的通知值 ( 如果上次发送给接收任务的通知还没被处理 )
● 覆盖接收任务的通知值。
● 更新接收任务通知值的一个或多个 bit
● 增加接收任务的通知值。
任务的三种通知状态
1.未等待通知状态:就是任务的初始状态
2.等待通知状态 :当调用 ulTaskNotifyTake() 函数并设置 ulClearCountOnExit 参数为 0 时,任务将进入等待通知状态。在此状态下,任务只需要等待通知状态变量的值由 0 变为 1,即有其他任务向该任务发送通知,就可以返回,并使用最后接收到的通知值作为函数返回值。 如果没有其他任务向该任务发送通知,则任务将一直处于等待状态,直到有其他任务向该任务发送通知或超时(如果设置了超时参数)。
3.等待接收通知状态:当调用 ulTaskNotifyTake() 函数并设置 ulClearCountOnExit 参数为 1 时,任务将进入等待接收通知状态。在此状态下,任务需要等待通知状态变量的值由 0 变为 1,即有其他任务向该任务发送通知,并且在接收到通知后,将通知状态变量清零。 与等待通知状态不同的是,在等待接收通知状态下,即使之前已经接收到通知并返回了通知值,任务下次再调用 ulTaskNotifyTake() 函数时仍然会被阻塞等待新的通知。
任务通知的几个注意点:
1.不可以将通知发送到中断中
2.通知不可以发送给多个任务
3.发送通知的任务不可以被阻塞
任务通知函数介绍:

 

1.xTaskNotify()

 功能:向指定的任务发送一个任务通知,并且带有通知值 也可以指定通知值的发送方式

参数:

xTaskToNotify:  任务句柄,指定发送给哪个任务

ulValue: 任务通知值

eAction: 任务通知的更新方法【是一个结构体】

 注意的是:eSetValueWithOverwrite 覆盖的是接受任务通知的任务,即使当前的任务的通知值上一次没有被读取,也还是会被覆盖 

2.xTaskNotifyFromISR()

这个是xTaskNotify()的中断版本,

 

 参数:

xTaskToNotify: 任务句柄,指定发送的任务

ulValue: 任务通知值

eAction: 任务通知的更新方法

pxHigherPriorityWoken: 是否要进行任务切换,pdTRUE----->推出的时候要进行任务的切换,当发送的任务通知导致比当前运行任务的更高优先级的任务被转为就绪态,就需要进行任务fan

3.xTaskNotifyAndQuery()

参数:

xTaskToNotify: 任务句柄,指定发送的任务

ulValue: 任务通知值

eAction: 任务通知的更新方法

pulPreviousNotificationValue: 保存更新前的任务通知值

注:当参数eAction为eSetValueWithOverwrite,当任务通知值没有更新成功【1.当接收通知的任务上一次的通知值没有被处理,则新接收的通知值就可能会更新失败2.频繁的发送任务通知,导致通知值被一直覆盖,则可能也会更新失败】

4.xTaskNotifyAndQueryFromISR()

 这是xTaskNotifyAndQuery()中断版本

还是相对于上面的参数多了一个退出切换任务的参数。

5.ulTaskNotifyTake()

 参数:

xClearCountOnExit: pdTRUE----->返回的任务通知值清零   pdFLASE----->返回的认为通知值减一

xTicksToWait: 阻塞时间

返回值:清零或者减一之前的任务通知值

优点:想对于之前的二值信号量以及计数信号量,这个是一种更轻量化的实现,因为信号量是基于内核实现的,但是这个任务通知就是在任务创建的时候,每个人就存在了,是基于任务栈和变量的,不需要任何的内核对象。

6.xTaskNotifyWait()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夜路难行々

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

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

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

打赏作者

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

抵扣说明:

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

余额充值