6 Comentários

RTOS: Uso de Queue para sincronização e comunicação de tarefas

Os semáforos que vimos no artigo anterior permitem a sincronização de tarefas e uma simples comunicação entre elas com apenas valores binários. Mas se seu projeto precisa de algo mais complexo para sincronização ou comunicação entre tarefas e ISRs, pode ser a vez da Queue.

O que é uma Queue e como funciona?

Queue é um buffer, uma fila de dados no formato FIFO, que permite sincronização de tarefas, como vimos em semáforos, porém é mais utilizada para comunicação entre tarefas e ISRs onde precisamos enviar valores (variáveis) para outros lugares. Usar queues visa a diminuição de variáveis globais em seu código. Mesmo ele sendo um objeto global, conta com métodos de atomicidade e timeout que podem agregar uma dinâmica muito interessante em seu projeto e produto.

Uso do Queue tipo FIFO.
Figura 1 – FIFO.
Animação de uma Queue FIFO.
Figura 2 – Animação de uma Queue FIFO.

A queue funciona na forma de um buffer FIFO, mas há funções que permitem escrever no começo do buffer em vez de apenas no fim. É tão simples que com a figura 3 já podemos entender o funcionamento da queue e testar na prática!

Escrita e leitura da queue.
Figura 3 – Escrita e leitura da queue.

As queues do FreeRTOS são objetos com capacidade e comprimento fixo. Como o exemplo da figura 3, a queue foi criada com 5 “espaços” (slots) e 2 bytes por slot. Isso implica na forma e frequência em que a queue será utilizada. Ela deve atender o tamanho máximo de suas variáveis e também ter comprimento considerável para evitar que fique lotada (a menos que seja proposital, como nas “MailBox”). Apesar da queue também funcionar para sincronização de tarefas como vimos em semáforos, o foco dessa prática será unicamente na transferência de dados entre duas tarefas. Então vamos começar!

Código do projeto:

Tarefas se comunicando por Queues.
Figura 4 – Tarefas se comunicando por Queues.

Testando o código, podemos observar que enquanto a tarefa responsável por enviar variáveis (t1) envia valores abaixo de 15, a outra tarefa (t2) mostra o valor recebido na tela. Porém, quando t1 chega no número 15, entra em delay por 5 segundos, ocasionando no timeout da leitura na t2, mostrando na tela que o timeout de 1 segundo expirou.

Queues podem tanto funcionar como um tipo especial de semáforos, onde podemos analisar valores recebidos e sincronizar tarefas a partir disso, como também, e principalmente, efetuar a comunicação entre tarefas e ISRs.

Saiba mais

Desenvolvendo com o Zephyr RTOS: Controlando o Kernel

Primeiras impressões com o react.o

Fila circular para sistemas embarcados

Referências

https://freertos.org/Documentation/RTOS_book.html
http://esp-idf.readthedocs.io/en/latest/api-reference/system/freertos.html

Outros artigos da série

<< RTOS: Semáforos para sincronização de tarefasRTOS: Uso de grupo de eventos para sincronização de tarefas >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Software » RTOS: Uso de Queue para sincronização e comunicação de tarefas
Comentários:
Notificações
Notificar
guest
6 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Marcos Félix
Marcos Félix
12/03/2019 07:54

Bom dia, José Morais, como faço para entrar em contato com você?

Yuri Lima
Yuri Lima
09/08/2018 23:24

Opa. Morais, blzz cara!!! ?

Cara continuar nessa abordagem de fila, acredito que tenha bastante assunto para abordar ainda. Eu venho acompanhando seus posts e acho muito significativo. Parabéns pela iniciativa. CONTINUA!!!!!!!

José Morais
José Morais
Reply to  Yuri Lima
10/08/2018 08:01

Opa! O plano inicial era parar por aqui, mas acho que vou continuar com “eventos”, “software timer” e assim por diante…

Yuri Lima
Yuri Lima
Reply to  José Morais
13/08/2018 10:40

Show de bola cara. VLWW

Welington Souza
Reply to  José Morais
31/10/2018 07:59

Não para não, está muito interessante! Está muito bom!!

Talvez você goste:

Séries



Outros da Série

Menu

WEBINAR
 
Porque o RTOS não faz o que eu quero?

Data: 28/10 às 19:30h - Apoio: Mouser Electronics
 
INSCREVA-SE AGORA »



 
close-link