/*
1.2
Exemplo prático de uma tarefa em DOIS núcleos
aula01_4_2024.pdf
*/
#include <Arduino.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
//Definição da função da tarefa para o núcleo 0
void minhaTarefaNucleo0(void *pvParameters){
//loop infinito da tarefa
while(true){
Serial.println("Executando minha tarefa no núcleo 0!");
//delay(1000);//Delay de 1 segundo
vTaskDelay(pdMS_TO_TICKS(1000));//Aguarda 100ms
}
}
//Definiação da função da tarefa para o núcleo 1
void minhaTarefaNucleo1(void *pvParameters){
//loop infinito da tarefa
while(true){
Serial.println("Executando minha tarefa no núcleo 1!");
//delay(1000);//Delay de 1 segundo
vTaskDelay(pdMS_TO_TICKS(1000));//Aguarda 100ms
}
}
void setup() {
// Inicialização da porta serial para comunicação
Serial.begin(115200);
Serial.println("Hello, ESP32!");
//Criação da tarefa para o núcleo 0
xTaskCreatePinnedToCore(
minhaTarefaNucleo0, //Função da tarefa
"MinhaTarefaNucleo0", //Nome da tarefa (para fins de depuração)
10000, //tamanho da pilha da tarefa (em palavras)
NULL, //parâmetros da tarefa
1, //prioridade da tarefa (0 é a menor prioridade)
NULL, //identificador da tarefa (opcional)
0 //núcleo em que a tarefa será executada (0 ou 1)
);
//Criação da tarefa para o núcleo 1
xTaskCreatePinnedToCore(
minhaTarefaNucleo1, //função da tarefa
"MinhaTarefaNucleo1", //nome da tarefa (para fins de depuração)
10000, //tamanho da pilha a tarefa (em palavras)
NULL, //parâmetro da tarefa
1, //prioridade da tarefa (0 é a menor prioridade)
NULL, //identificador da tarefa (opcional)
1 //núcleo em que a tarefa será executada (0 ou 1)
);
}
void loop() {
// loop vazio, o código da aplicação está nas tarefas
}