#include <Arduino_FreeRTOS.h>
/*
monitoramente da área de pilha
*/
#define L_VERDE 4
#define L_AZUL 7
#define L_AMARELO 8
#define L_BRANCO 11
TaskHandle_t tVerde, tAzul, tAmarelo;
void tarefaVerde(void *pv);
void tarefaAzul(void *pv);
void tarefaAmarelo(void *pv);
void setup() {
Serial.begin(9600);
// xTaskCreate(tarefaVerde, "VERDE", 128, NULL, 1, &tVerde);
// xTaskCreate(tarefaAzul, "AZUL", 128, NULL, 1, &tAzul);
// xTaskCreate(tarefaAmarelo, "AMARELO", 128, NULL, 1, &tAmarelo);
xTaskCreate(tarefaBranco, "BRANCO", 128, NULL, 1, NULL);
}
void tarefaBranco(void *pv) {
int intensidade = 0;
// pinMode(L_VERDE, OUTPUT);
while(1) {
analogWrite(L_BRANCO, intensidade);
intensidade++;
if (intensidade > 255) intensidade = 0;
Serial.println(intensidade);
delay(5);
}
}
void tarefaVerde(void *pv) {
pinMode(L_VERDE, OUTPUT);
while(1) {
digitalWrite(L_VERDE, !digitalRead(L_VERDE));
UBaseType_t marca = uxTaskGetStackHighWaterMark(NULL);
Serial.print("Pilha VERDE (bytes livres minimos): ");
Serial.println(marca);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
void tarefaAzul(void *pv) {
pinMode(L_AZUL, OUTPUT);
while(1) {
digitalWrite(L_AZUL, !digitalRead(L_AZUL));
UBaseType_t marca = uxTaskGetStackHighWaterMark(NULL);
Serial.print("Pilha AZUL (bytes livres minimos): ");
Serial.println(marca);
vTaskDelay(700 / portTICK_PERIOD_MS);
}
}
void tarefaAmarelo(void *pv) {
volatile uint8_t buffer[20]; // ocupa mais que toda pilha da tarefa
pinMode(L_AMARELO, OUTPUT);
while(1) {
buffer[0] = 0x02;
digitalWrite(L_AMARELO, !digitalRead(L_AMARELO));
UBaseType_t marca = uxTaskGetStackHighWaterMark(NULL);
Serial.print("Pilha AMARELO (bytes livres minimos): ");
Serial.println(marca);
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}
void loop() {
}