/***************************************************************
* Exemplos para criação de tasks
* Esse exemplço exibe como criar tarefas no FreeRTOS
* Por: Fábio Souza
***************************************************************/
/*Biblioteca do Arduino*/
#include <Arduino.h>
/*Bibliotecas FreeRTOS */
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
/*mapeamento de pinos*/
#define LED 2
/* Variáveis para armazenamento do handle das tasks*/
TaskHandle_t taks1Handle = NULL;
TaskHandle_t taks2Handle = NULL;
/*protítipos das Tasks*/
void vTask1(void *pvParameters);
void vTask2(void *pvParameters);
void vTask3(void *pvParameters);
/*função setup*/
void setup() {
pinMode(LED,OUTPUT);
Serial.begin(9600); //configura comunicação serial com baudrate de 9600
/*criação das tasks*/
xTaskCreate(vTask1,"TASK1",configMINIMAL_STACK_SIZE,NULL,5,&taks1Handle);
xTaskCreate(vTask2,"TASK2",configMINIMAL_STACK_SIZE+1024,NULL,2,&taks1Handle);
xTaskCreate(vTask3,"TASK3",configMINIMAL_STACK_SIZE+1024,NULL,3,&taks1Handle);
}
/*função loop*/
void loop() {
//vTaskDelay(3000); //libera a CPU por 3 seg
}
/*
vTask1
inverte LED em intervalos de 200 ms
*/
void vTask1(void *pvParameters)
{
//pinMode(LED,OUTPUT);
unsigned long init_time; //= millis();
unsigned long end_time; //= millis();
while (1)
{ //init_time=millls();
init_time=millis();
digitalWrite(LED,!digitalRead(LED));
delay(10);
end_time=millis();
//end_time=mills();
Serial.println(end_time-init_time);
vTaskDelay(pdMS_TO_TICKS(500));
}
}
/*
vTask2
imprime valor de contagem a cada 1 seg
*/
void vTask2(void *pvParameters)
{
//int cont = 0;
while (1)
{
Serial.println("Msg da Task 2: ");
vTaskDelay(pdMS_TO_TICKS(400));
}
}
/*
vTask3
imprime valor de contagem a cada 1 seg
*/
void vTask3(void *pvParameters)
{
//int cont = 0;
while (1)
{
Serial.println("Msg da Task 3: ");
vTaskDelay(pdMS_TO_TICKS(600));
}
}