Free RTOS-12事件组1标志位等待运行

文章展示了如何在FreeRTOS中使用事件组进行任务间的通信和同步。`vTaskCode1`任务等待`BIT_0`和`BIT_4`被设置,而`vTaskCode2`任务则在特定时间间隔设置这些位。`xEventGroupWaitBits`和`xEventGroupSetBits`函数是关键操作。
摘要由CSDN通过智能技术生成

包含#include "freertos/event_groups.h"。不能 中断里使用,标志满足解除任务阻塞。

#define BIT_0 (1 << 0)

#define BIT_4 (1 << 4)

EventGroupHandle_t xCreatedEventGroup; // 创建一个

void vTaskCode1(void *pvParam) // 任务

{

    while (1)

    {

        printf("----------!\n");

        printf("vTaskCode1 wait \n");

        xEventGroupWaitBits(

            xCreatedEventGroup, // 创建好的事件组

            BIT_0 | BIT_4,      // 指定事件组的位

            pdTRUE,             // 自动清除

            pdTRUE,             // pdFALSE或。真为与

            portMAX_DELAY);     // 位完成设置的最大时间

        printf("vTaskCode1 bitp or bit4 \n");//and

        vTaskDelay(3000 / portTICK_PERIOD_MS);

    }

}

void vTaskCode2(void *pvParam) // 任务

{

    vTaskDelay(1000 / portTICK_PERIOD_MS);

    while (1)

    {

        printf("set  bit0 \n");

        xEventGroupSetBits(xCreatedEventGroup, BIT_0);

        vTaskDelay(5000 / portTICK_PERIOD_MS);

        printf("set  bit4 \n");

        xEventGroupSetBits(xCreatedEventGroup, BIT_4);

        vTaskDelay(5000 / portTICK_PERIOD_MS);

    }

}

void app_main(void)

{

    xCreatedEventGroup = xEventGroupCreate();

    /* Was the event group created successfully? */

    if (xCreatedEventGroup == NULL)

    {

        printf("Group no\n");

    }

    else

    {

        vTaskSuspendAll();

        xTaskCreate(vTaskCode1, // 任务函数

                    "task1",    // 名字

                    4096,       // 分配内存

                    NULL,       // 传参数

                    2,          // 任务优先级

                    NULL);      // 句柄

        xTaskCreate(vTaskCode2, "task2", 4096, NULL, 3, NULL);

        xTaskResumeAll();

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

广州FG大鹏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值