FreeRTOS V8.2.0 e Task Notifications
- por Sergio Prado
No último dia 16 de janeiro, foi liberada a versão 8.2.0 do FreeRTOS com uma funcionalidade bem interessante chamada Task Notifications.
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!