FreeRTOS学习笔记(九)任务通知

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

 &esmp;任务通知功能允许我们可以在不创建任务队列、信号量的前提下为任务发送信息,但这种发送只能发送给一个任务,且只有等待的任务被阻塞。


一、任务通知是什么

1.1 任务通知的引入

  从Free RTOS的V8.2.0版本开始,增加了任务通知这一功能,每一个任务都有32位的通知值,在大多数情况下,任务通知可以代替二值信号量、计数信号量、长度为1的队列已经事件组,但是不可以代替互斥量。任务控制块中的成员变量 ulNotifiedValue就是这个通知值。任务通知是一个事件,假如某个任务通知的接收任务因为等待任务通知而阻塞的话,向这个接收任务发送任务通知以后就会解除这个任务的阻塞状态。也可以更新接收任务的任务通知值,任务通知可以通过如下方法更新接收任务的通知值:
● 不覆盖接收任务的通知值(如果上次发送给接收任务的通知还没被处理)。
● 覆盖接收任务的通知值。
● 更新接收任务通知值的一个或多个 bit。
● 增加接收任务的通知值

1.2 任务通知与队列/信号量的区别

在这里插入图片描述

1.3 任务通知的运行机制

  1. 无需创建、任务和中断都可以发送但是中断不可以等待通知。
  2. 发送通知: 其他任务或中断发送通知时,会修改目标任务的通知值。如果任务当前正在等待通知,接收到通知后它会立即从阻塞状态恢复执行。如果不阻塞,通知值会累积或替换,具体取决于发送通知时设置的操作模式。
  3. 等待通知: 任务可以通过ulTaskNotifyTake()或xTaskNotifyWait()等待通知值到来。在调用这些 API 时,任务可以选择:
    ● 阻塞直到接收到通知。
    ● 超时等待一段时间,若超时仍未收到通知则继续执行其他操作。
    ● 不阻塞直接检查通知值是否可用。
  4. 通知值的处理: 当任务收到通知时,它可以检查通知值,并根据值的变化(例如增加或减少)做出相应动作。任务的通知值可以代表任务的进度、状态或者某些计数。

二、相关API函数

2.1 通知发送

xTaskNotify()
  向目标任务发送通知,可以选择更新通知值(例如增加、设定或替换)。

BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, 
						uint32_t ulValue, eNotifyAction eAction )
  • 参数:

    • xTaskToNotify: 任务句柄,指定任务通知是发送给哪个任务的。
    • ulValue: 任务通知值。
    • eAction: 任
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值