MCU & FPGA RTOS FreeRTOS: Stream Buffers, comparação com Queues e critérios de escolha

FreeRTOS: Stream Buffers, comparação com Queues e critérios de escolha

Introdução: comunicação entre tarefas no FreeRTOS

Em sistemas embarcados baseados em Real-Time Operating Systems (RTOS), a comunicação entre tarefas (tasks) e entre interrupções (ISRs – Interrupt Service Routines) é um dos pilares da arquitetura de software. No FreeRTOS, essa comunicação pode ocorrer por diversos mecanismos: queues, semaphores, event groups, task notifications e, mais recentemente, stream buffers e message buffers. Cada um desses mecanismos foi projetado para atender a padrões específicos de troca de dados, com impactos diretos em desempenho, uso de memória, latência e complexidade do código.

Historicamente, as queues foram o principal mecanismo para troca de dados entre tarefas no FreeRTOS. Elas oferecem uma semântica clara, segura e genérica, permitindo o envio de estruturas de dados completas entre produtores e consumidores. No entanto, conforme sistemas embarcados passaram a lidar com fluxos contínuos de dados — como áudio, streams de sensores, bytes vindos de UART, SPI, USB ou stacks de rede —, tornou-se evidente que o modelo tradicional de queue não era o mais eficiente para esse tipo de cenário.

É nesse contexto que surgem os Stream Buffers, introduzidos para lidar com dados orientados a fluxo, onde o mais importante não é a fronteira entre mensagens, mas sim a sequência contínua de bytes. Diferentemente das queues, que operam com itens discretos e de tamanho fixo, os stream buffers operam como um buffer circular de bytes, permitindo escrita e leitura parcial, com controle fino sobre bloqueio, timeout e sincronização entre tarefas e ISRs.

Nesta série de artigos sobre FreeRTOS, esta seção tem como objetivo introduzir formalmente o conceito de stream buffers, posicioná-los corretamente dentro do ecossistema de mecanismos de comunicação do sistema operacional e preparar o terreno para uma comparação técnica aprofundada com queues. Ao longo das próximas seções, veremos como funcionam internamente, quando usá-los, quando evitá-los e como escrever código eficiente e seguro usando esse recurso.


0 0 votos
Classificação do artigo
Inscrever-se
Notificar de
guest
0 Comentários
mais antigos
mais recentes Mais votado
Feedbacks embutidos
Ver todos os comentários

Related Post

0
Adoraria saber sua opinião, comente.x