Eventos en FreeRTOS 7.1.1

0

Estoy buscando un método para informar una tarea en el firmware sobre el cambio en otro lugar (utilizando FreeRTOS 7.1.1). Necesito recibir información acerca de los cambios, pero no querría verificar el valor en el ciclo, algo así como interrupciones, pero que sean internas.

Por ejemplo (en pseudocódigo tipo C)

void task1(int change1)
{
 int value1 = change1;
}

void task2(int change2)
{
 int value2 = change2;
}

void task3(int change3)
{
 int value3 = change3;
}

void taskCheck()
{
  doSomething();
}

Y cuando se cambia cualquier valor en cualquier tarea, se activa taskCheck() .

Pensé en las colas, pero preferí preguntar primero si no hay una solución mejor.

P.S. No hay bits de eventos y grupo de eventos en FreeRTOS 7.1.1

    
pregunta m0drzew

1 respuesta

3

Puedes usar un semáforo para señalar un evento. Si el evento es genérico para taskCheck y no hay datos asociados con el evento, puede hacerlo de esta forma.

void task1(int change1)
{
 int value1 = change1;
 xSemaphoreGive(the_semaphore);
}

void task2(int change2)
{
 int value2 = change2;
 xSemaphoreGive(the_semaphore);
}

void task3(int change3)
{
 int value3 = change3;
 xSemaphoreGive(the_semaphore);
}

void taskCheck()
{
  xSemaphoreTake(the_semaphore, WAIT_FOREVER);
  doSomething();
}

Si the_semaphore es un semáforo de conteo, entonces se podrían acumular varios eventos mientras que taskCheck los maneja de uno en uno.

Pero si los eventos son específicos o contienen datos, es probable que desee utilizar una cola en lugar de un semáforo.

Lea sobre las colas y los semáforos de FreeRTOS aquí .

    
respondido por el kkrambo

Lea otras preguntas en las etiquetas