1
0
Files
setr2-monorepo/P2_SETR2/ejercicios/parte1.txt
2025-10-27 15:41:57 +01:00

186 lines
2.3 KiB
Plaintext

/*
* led_task.c
*
* Created on: Oct 6, 2025
* Author: jomaa
*/
#include "led_task.h"
TaskHandle_t hButtonTask;
TaskHandle_t hLedTask;
void CreateLedTask()
{
/* EJERCICIOS 1/2/3
LED_Config* cfg = pvPortMalloc(sizeof(LED_Config));
if (cfg != NULL)
{
cfg->led = 0;
cfg->delay = 200;
}
xTaskCreate(
LedToggleTask,
"LedToggleTask_1",
128,
(void*) cfg,
1,
NULL
);
*/
/* EJERCICIO 4
xTaskCreate(
LedAnimationTask,
"LedAnimationTask",
128,
NULL,
1,
NULL
);
*/
/* EJERCICIO 5
* - con la misma prioridad alternan continuamente entre ellas y son animaciones
* sin sentido
* - con prioridades distintas, visualmente y con un delay un poco más alto
* podría parecer que se hacen una detrás de otra (en orden de prioridad)
xTaskCreate(
LedAnimationTask1,
"LedAnimationTask1",
128,
NULL,
1,
NULL
);
xTaskCreate(
LedAnimationTask2,
"LedAnimationTask2",
128,
NULL,
2,
NULL
);*/
}
void LedToggleTask(void* pArgs)
{
LED_Config* cfg = (LED_Config*) pArgs;
uint8_t counter = 5;
for(;;)
{
if(cfg->led > 2)
{
cfg->led = 0;
}
while (counter > 0)
{
LED_Toggle(cfg->led);
vTaskDelay(cfg->delay);
counter--;
}
cfg->led++;
xTaskCreate(
LedToggleTask,
"LedToggleTask_New",
128,
(void*) cfg,
1,
NULL
);
vTaskDelete(NULL);
}
}
void LedAnimationTask(void* pArgs)
{
for(;;)
{
switch(ReadJoy())
{
case 0:
// stand-by
LED_Off(0);
LED_Off(1);
LED_Off(2);
break;
case 1:
animation1();
break;
case 2:
animation2();
break;
case 3:
animation3();
break;
}
vTaskDelay(50);
}
}
void LedAnimationTask1(void* pArgs)
{
for(;;)
{
int i;
for(i = 0; i < 3; i++)
{
LED_On(i);
vTaskDelay(150);
LED_Off(i);
}
for(i = 1; i > 0; i--)
{
LED_On(i);
vTaskDelay(150);
LED_Off(i);
}
}
}
void LedAnimationTask2(void* pArgs)
{
for(;;)
{
int i, j;
for(j = 0; j < 5; j++)
{
for(i = 0; i < 3; i++)
LED_On(i);
vTaskDelay(100);
for(i = 0; i < 3; i++)
LED_Off(i);
vTaskDelay(100);
}
}
}
void LedAnimationTask3(void* pArgs)
{
for(;;)
{
int i;
for(i = 0; i < 3; i++)
{
LED_On(i);
vTaskDelay(150);
}
for(i = 2; i >= 0; i--)
{
LED_Off(i);
vTaskDelay(150);
}
}
}