FreeRTOS笔记-任务通知

  1. 任务通知
    1. 任务通知的理解
    2. 任务通知的性质:
    3. 任务通知使用——轻量级信号量
    4. 任务通知使用——轻量级队列
    5. 任务通知使用——轻量级事件组

任务通知

任务通知的理解

使用队列、信号量、事件组时,我们都要事先创建对应结构体;
而使用任务通知时,任务结构体TCB中就包含了内部对象,可以直接接收通知。即我们不需要另外去创建通知,其内部就有这个属性。

在任务通知中,通知者不会等待发送是否成功,而接收者可以等待通知时阻塞。

任务通知有三个状态(Notify State),分别为:

  • 任务没有等待通知
  • 任务在等待通知
  • 任务接收到通知待处理

任务通知的性质:

任务通知可以对一位的val进行修改,在某些特点的情况下可以用作消息队列或信号量来使用。如使用val来作为一位数据进行通信,或对val进行增加清除做二进制信号量使用。

任务通知使用——轻量级信号量

任务通知计数值增加,该变量为任务的TCB(TaskHandle_t类型),该函数使计数值++。

1
xTaskNotifyGive(xTaskTCB2);

读取任务通知的函数如下;

1
val = ulTaskNotifyTake(pdFALSE, portMAX_DELAY);

该函数的返回值是任务通知的计数值。输入变量:

  • 是否清空计数值
  • 等待时间

不清理计数值的情况下,该函数读取到通知后对计数值进行–操作。

在清理计数值的情况下,不管计数值是多少,读取后清零。

任务通知使用——轻量级队列

TCB结构体中,有value和state属性,

1
xTaskNotify( xTaskToNotify, ulValue, eAction )

任务通知

  • @param xTaskToNotify通知任务的TCB句柄
  • @param ulValue 传入的数值
  • @param eAction 设置参数,可以设置是否覆盖(队列)
    1
    xTaskNotifyWait( ulBitsToClearOnEntry, ulBitsToClearOnExit, pulNotificationValue, xTicksToWait ) 
  • @param ulBitsToClearOnEntry 进入时需要清空的位数
  • @param ulBitsToClearOnExit 出去时需要清空的位数
  • @param pulNotificationValue 读取数值需要输入到哪个地址
  • @param xTicksToWait 等待时间

任务通知使用——轻量级事件组

事件组的基本原理是,通过一个数据的某一位作为逻辑条件,判断代码是否继续进行。通过这个原理,可以使用任务通知来作为轻量级的事件组

作为事件组使用,写的时候使用只写bit功能,读取的时候需要把读取的数据进行位数逻辑判断。


个人主页
邮箱 1186703947@qq.com


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 1186703947@qq.com

💰

×

Help us with donation

相册 动态菜单1