#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#define TASK1_WAIT_EVENT BIT0
#define TASK2_WAIT_EVENT BIT1
#define TASK3_WAIT_EVENT BIT2
EventGroupHandle_t event_group;
void task1(void *pvParameters)
{
while(1)
{
vTaskDelay(1000/ portTICK_PERIOD_MS);
printf("Task1 is done\n");
xEventGroupSync(event_group, TASK1_WAIT_EVENT, TASK2_WAIT_EVENT | TASK2_WAIT_EVENT | TASK3_WAIT_EVENT, portMAX_DELAY);
vTaskDelay(10 / portTICK_PERIOD_MS);
}
}
void task2(void *pvParameters)
{
while(1)
{
vTaskDelay(5000/ portTICK_PERIOD_MS);
printf("Task2 is done\n");
xEventGroupSync(event_group, TASK2_WAIT_EVENT, TASK1_WAIT_EVENT | TASK2_WAIT_EVENT | TASK3_WAIT_EVENT, portMAX_DELAY);
vTaskDelay(10 / portTICK_PERIOD_MS);
}
}
void task3(void *pvParameters)
{
while(1)
{
vTaskDelay(10000/ portTICK_PERIOD_MS);
printf("Task3 is done\n");
xEventGroupSync(event_group, TASK3_WAIT_EVENT, TASK1_WAIT_EVENT | TASK2_WAIT_EVENT | TASK3_WAIT_EVENT, portMAX_DELAY);
vTaskDelay(10/ portTICK_PERIOD_MS);
}
}
void app_main(void)
{
event_group = xEventGroupCreate();
xTaskCreate(task1, "task1", 2048, NULL, 1, NULL);
xTaskCreate(task2, "task2", 2048, NULL, 1, NULL);
xTaskCreate(task3, "task3", 2048, NULL, 1, NULL);
}