// #include <avr/io.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/semphr.h"
#include <stdio.h>
#include <string.h>
// #include <Arduino_FreeRTOS.h>
// #include <queue.h>
#define LENGHT_OF_BUFFER 05
#define TRIGGER_LEVEL 01
#define DELAY_TO_BE_USED 200
// #define LED 2
void vInitializeMutex(void);
void vTerminalPrintTask(void *params);
// void LEDBlinkTask(void *params);
SemaphoreHandle_t mutex_handle = NULL;
typedef struct {
uint8_t *string;
uint8_t length;
uint16_t delay;
}TaskData;
TaskData data[2];
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
char *task1_string = "Task 1 Prints\r\n", *task2_string = "Task 2 Prints\r\n";
uint8_t len1 = strlen(task1_string), len2 = strlen(task2_string);
data[0].string = (uint8_t *)task1_string;
data[0].length = len1;
data[0].delay = 350;
data[1].string = (uint8_t *)task2_string;
data[1].length = len2;
data[1].delay = 150;
vInitializeMutex();
// xTaskCreate(vTerminalPrintTask, NULL, 50000, NULL,1,NULL);
// xTaskCreate(LEDBlinkTask, NULL, 50000, NULL, 2, NULL);
// xTaskCreate(LEDBlinkTask, "LED_BLINK", 1200, NULL, 1, NULL);
// xTaskCreate(vTerminalPrintTask, "Task1", 100000, (void *)&data[0],1,NULL);
// xTaskCreate(vTerminalPrintTask, "Task2", 100000, (void *)&data[1],2,NULL);
// vTaskStartScheduler();
}
void loop() {
// put your main code here, to run repeatedly:
// delay(10); // this speeds up the simulation
xTaskCreate(vTerminalPrintTask, "Task1", 10000, (void *)&data[0],1,NULL);
xTaskCreate(vTerminalPrintTask, "Task2", 10000, (void *)&data[1],2,NULL);
vTaskStartScheduler();
}
void vInitializeMutex(void)
{
mutex_handle = xSemaphoreCreateMutex();
if(mutex_handle != NULL)
printf("mutex created successfully!\n");
else
printf("mutex are not created!\n");
}
void vTerminalPrintTask(void *params)
{
TaskData *data = (TaskData *)params;
while(1)
{
xSemaphoreTake(mutex_handle, portMAX_DELAY);
{
printf("%s%d\n",data->string, data->length );
// UART4SendData(data->string, data->lenght );
}
// printf("Token received correctly from sender task!\n");
xSemaphoreGive(mutex_handle);
vTaskDelay(pdMS_TO_TICKS(data->delay));
// vTaskDelay(pdMS_TO_TICKS(DELAY_TO_BE_USED));
}
}
// void LEDBlinkTask(void *params)
// {
// while(1)
// {
// digitalWrite(LED, HIGH); //LED PIN SET HIGH
// printf("LED ON"); // LED TURN ON
// vTaskDelay(pdMS_TO_TICKS(DELAY_TO_BE_USED)); // 1 SEC DELAY
// digitalWrite(LED, LOW); //LED PIN SET LOW
// printf("LED OFF"); // LED TURN OFF
// vTaskDelay(pdMS_TO_TICKS(DELAY_TO_BE_USED));
// }
// }