首页 > 其他分享 >任务通知

任务通知

时间:2024-04-02 15:47:28浏览次数:9  
标签:va Task 通知 void value 任务 task

FreeRTOS 从 V8.2.0 版本开始提供任务通知这个功能,每个任务都有一个 32 位的通知 值,在大多数情况下,任务通知可以替代二值信号量、计数信号量、事件组,也可以替代 长度为 1 的队列(可以保存一个 32位整数或指针值)。 简单版和复杂版使用的函数不一样,简单版可以替代一个二值信号量,复杂版可替代很多,关键在于xTaskNotify最后一个参数的设置

BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction );
typedef enum
{
eNoAction = 0, /* Notify the task without updating its notify value. */
eSetBits, /* Set bits in the task's notification value. */
eIncrement, /* Increment the task's notification value. */
eSetValueWithOverwrite, /* Set the task's notification value to a specific value even if the previous value has not yet been read by the task. */
eSetValueWithoutOverwrite /* Set the task's notification value if the previous value has been read by the task. */
} eNotifyAction;

    参数 eAction 为 eSetValueWithoutOverwrite 时,如果被通知任务还没取走上一个通知, 又接收到了一个通知,则这次通知值未能更新并返回 pdFALSE,而其他情况均返回pdPASS。  

下面是示例:

简单版
static void send_Task(void* pvParameters)
{
    while(1)
    {
        xTaskNotifyGive(receive_Task_handle);    
        //等待 接收任务 发通知
        ulTaskNotifyTake( pdTRUE,  portMAX_DELAY);
        printf("接收 receive_Task\n\r");
    }
}

static void receive_Task(void* pvParameters)
{   
        while(1)
    {
        //等待 发送任务 发通知
        ulTaskNotifyTake( pdTRUE,  portMAX_DELAY);
        printf("接收 send_Task\n\r");

        xTaskNotifyGive(send_Task_handle);
        vTaskDelay(1000);
    }
}

复杂版

static void send_Task(void* pvParameters)
{
    uint32_t va = 0;
    while(1)
    {
   //最后一个参数设置很重要 
        if(xTaskNotify(receive_Task_handle, va, eSetValueWithOverwrite) == pdTRUE)
            va++;
        vTaskDelay(100);
    }
}

static void receive_Task(void* pvParameters)
{   
      uint32_t va=0;
    while(1)
    {
        xTaskNotifyWait( 0, 0 , &va,  portMAX_DELAY);
        printf("接收到 %d\n\r",va);
        vTaskDelay(1000);
    }
}

 

 

 

标签:va,Task,通知,void,value,任务,task
From: https://www.cnblogs.com/njit-sam/p/18110694

相关文章

  • PowerShell中调用GPU命令通常涉及到与GPU相关的任务,如查看GPU信息、管理GPU驱动、执行
    PowerShell中调用GPU命令通常涉及到与GPU相关的任务,如查看GPU信息、管理GPU驱动、执行GPU加速的计算任务等。以下是一些常见的PowerShell中调用GPU命令的示例:查看GPU信息:Get-WmiObject-Namespace"root\CIMV2"-ClassWin32_VideoController:通过WMI获取GPU信息,包括名称、制......
  • 一文教你实战构建消息通知系统Django
    本文分享自华为云社区《构建实时消息通知系统:Django实战指南》,作者:柠檬味拥抱。在Web应用程序中,实现消息通知系统是至关重要的,它可以帮助用户及时了解到与其相关的事件或动态。Django提供了信号机制,可以用于实现这样的通知系统。本文将介绍如何使用Django的信号机制来构建一个简......
  • 基于深度学习的咖啡豆叶片病害识别算法设计与实现任务书
    一、毕业设计(论文)课题的背景咖啡原产于非洲热带地区,距今发展己有1300多年的的历史。作为饮料,咖啡具有健胃、消食、利尿、醒脑、提神等功效。咖啡含有淀粉、糖分、脂肪和蛋白质等多种营养成分。其中小粒咖啡的主要成分含量为:粗纤维17.94、蛋白质13.86、粗脂肪11.97、淀粉6.......
  • 关于征集参与《工程售后服务评价技术要求》团体标准起草单位的通知
    根据2023年团体标准管理制修订计划安排,为使标准更具专业性、实用性和可操作性,吸纳行业内有代表性的骨干企业和专家作为起草单位和起草人,现就我单位牵头申报的《工程售后服务评价技术要求》团体标准公开征集起草单位和起草人。一、申请标准起草单位的机构必须具备以下条......
  • FreeRTOS 任务挂起和恢复API函数使用
    FreeRTOS任务挂起和恢复API函数使用挂起的作用就是当我们需要暂停某任务时候,等过一段时间在运行,这个时候要是使用删除和重建的方法就会当时任务进行时候的变量保存的值。当需要将这个任务停止运行一段时间的将这个任务挂起,当重新进行运行这个任务就恢复运行。vTaskSuspend()//......
  • 【赛题解析】【移动应用开发】全国职业院校技能大赛任务一:实现社区首页功能解析
    ​培训、环境、资料、考证公众号:波比网络公众号2:波比网络工作室移动应用开发技能大赛交流群:548238632波比网络专注于技能提升,赋能**本文章全文由波比网络原创,非法转载必究!**文章目录移动应用与开发任务1:实现社区首页功能1.界面顶部显示所在社区名称、轮播图和社......
  • RTOS—任务
    一RTOS任务RTOS(实时操作系统)中的任务是系统执行的基本单元,每个任务都代表了一个要完成的特定工作。RTOS通过任务调度算法来协调多个任务的执行,确保它们能够按照预定的要求和时间限制来运行。在RTOS中,任务通常具有以下特点:独立性:每个任务都有自己的执行流和上下文,它们之间相......
  • Worker 进行多线程任务开发
    概念介绍在OpenHarmony中,UI线程负责处理UI事件和用户交互,而Worker线程用于处理耗时操作,以提高应用程序的响应速度和用户体验。Worker线程是与主线程并行的独立线程,通常用于执行后台任务。需要注意的是,Worker线程中不能直接修改UI元素,UI更新必须在UI线程中进......
  • 这篇教你如何使用python自动化图形界面任务
    这篇教你如何使用python自动化图形界面任务PyAutoGUI是什么?PyAutoGUI是一个用于自动化任务和图形用户界面操作的Python库。它可以模拟鼠标移动、点击、键盘输入等操作,帮助用户实现自动化任务。优点:跨平台性:PyAutoGUI可以在Windows、macOS和Linux等多个平台......
  • 【IEEE会议征稿通知】第九届信息科学、计算机技术与交通运输国际学术会议(ISCTT 2024)
    【IEEE会议】第九届信息科学、计算机技术与交通运输国际学术会议(ISCTT2024)20249th InternationalConferenceonInformationScience,ComputerTechnologyandTransportation   第九届信息科学、计算机技术与交通运输国际学术会议(ISCTT2024)将于2024年6月28-30......