FreeRTOS V8.2.0 e Task Notifications

- por Sergio Prado

Categorias: FreeRTOS

No último dia 16 de janeiro, foi liberada a versão 8.2.0 do FreeRTOS com uma funcionalidade bem interessante chamada Task Notifications.

freertos

A idéia é ter um mecanismo mais simples e leve para notificar uma tarefa, substituindo semáforos, queues e event groups.

Usando esta API, uma tarefa pode bloquear esperando uma notificação com a função ulTaskNotifyTake(), e a notificação pode ser feita com a função xTaskNotifyGive() ou sua variante para uso em interrupções vTaskNotifyGiveFromISR().

Por exemplo, a tarefa abaixo irá bloquear esperando a notificação do pressionamento de um botão:

1
2
3
4
5
6
7
8
9
10
11
void task_button(void *pvParameters)
{
    button_enable_interrupt();
 
    for (;;) {
 
        ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
 
        /* handle button press */
    }
}

E a rotina de tratamento de interrupção do botão irá notificar a tarefa quando o botão for pressionado:

1
2
3
4
5
6
7
8
void button_isr(void)
{
    BaseType_t xHigherPriorityTaskWoken = pdFALSE;
 
    vTaskNotifyGiveFromISR(xTaskToNotify, &xHigherPriorityTaskWoken);
 
    portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
}

Segundo o site do FreeRTOS, esta funcionalidade é em torno de 45% mais rápida e usa menos memória RAM, quando comparada com a mesma solução usando semáforos.

É lógico que estas vantagens não vêm sem limitações. Esta funcionalidade deve ser utilizada apenas quando uma única tarefa precisa ser notificada em um determinado evento. Além disso, a tarefa que notifica não bloqueia caso a notificação anterior ainda não tenha sido tratada.

Mesmo assim, ela resolve boa parte das necessidades de notificação de tarefas, e por causa das vantagens citadas acima, deve ser usada sempre que possível.

A lista completa de funções relacionadas à esta funcionalidade está disponível no site do FreeRTOS. Ela é habilitada por padrão, e se você quiser removê-la (e economizar 8 bytes de RAM por tarefa) precisa declarar configUSE_TASK_NOTIFICATIONS com 0 no FreeRTOSConfig.h.

Além da funcionalidade de Task Notifications, a nova versão do FreeRTOs está repleta de alterações. O histórico completo está disponível como sempre no site do FreeRTOS.

Um abraço,

Sergio Prado

Sem Comentários

Nenhum comentário até agora... é a sua chance de ser o primeiro a comentar!

Faça um Comentário

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.