RTOS: Um ambiente multi-tarefas para Sistemas Embarcados

Atire a primeira pedra quem nunca tenha sofrido com problemas de multi-tarefas em embarcados, já que em qualquer sistema, desde pequeno ou grande, pode-se ter mais de um sensor ou atuador realizando tarefas específicas no sistema. Fazer o controle simultâneo de todos pode exigir um alto grau de programação e sincronização, deixando o projeto muito complexo. Por fim, acabamos usando outro embarcado para ajudar no sistema principal. Com esse mesmo pensamento, pode ser resolvido com um embarcado multi-core, mas os custos aumentam e não é interessante em produtos comerciais.

 

Então como podemos tirar essa pedra do caminho? Utilizando Sistemas Operacionais, mais especificamente Sistemas Operacionais de Tempo Real (Real Time Operating Systems - RTOS) que se difere em alguns aspectos de um Sistema Operacional Genérico (Generic Purpose Operating System - GPOS) como Windows, Mac e baseados em Linux...

 

O que é um Sistema Operacional?

 

Sistema Operacional.
Figura 1 - Sistemas Operacionais.

 

Um Sistema Operacional é um conjunto de ferramentas (softwares) que criam um ambiente multi-tarefas e também é uma abstração entre software e hardware, incluindo gerenciamento de recursos internos.

 

Principais itens de um Sistema Operacional

 

Kernel: É o núcleo do sistema operacional, sendo uma camada de abstração entre o Software e Hardware para gerenciar diversos recursos, como por exemplo:

  • Gerenciamento de memória RAM;
  • Gerenciamento de processos.

 

Scheduler: Scheduler algorithm é o software do sistema operacional que decide quais tarefas serão escolhidas para serem executadas. Normalmente são selecionadas pela maior prioridade ou, em caso de prioridades iguais, o scheduler tenta dividir o tempo entre todas tarefas. Vamos entender melhor na segunda parte desta série.

 

Tarefas: São como “mini programas”. Cada tarefa pode desempenhar algo totalmente diferente das outras ou também iguais e compartilhar recursos, como periféricos. São nas tarefas que iremos dividir nosso código em partes, deixando que o scheduler execute todas com suas devidas importâncias.

 

Quais são as diferenças entre GPOS e RTOS?

 

GPOS: É amplamente utilizado em computadores e similares por ter um alto throughput (vazão) de dados, é focado na execução de muitas tarefas simultaneamente, onde atraso de uma não é crítico, irá apenas atrasá-la. As tarefas do GPOS não tem um tempo limite para serem executadas, então é comumente chamado de “Not Time Critical”.

 

RTOS: É um sistema operacional mais especializado onde o tempo de resposta é mais importante do que executar centenas de tarefas simultaneamente. O tempo de resposta não precisa necessariamente ser o mais rápido possível, como o nome pode sugerir, mas deve ser previsível, logo, “Real-Time” pode ser uma resposta de vários minutos ou nanos segundos, dependendo da forma que seu sistema funciona. As tarefas do RTOS contam com tempo limite para serem executadas, então é comumente chamado de “Time Critical”.

 

Pensando em aplicações práticas

 

As aplicações práticas para um RTOS são normalmente quando precisamos efetuar muitas tarefas ao mesmo tempo ou trabalhar com “Real-Time” onde falhas além do tempo definido é crítico. Vamos imaginar um cenário onde o sistema embarcado efetua 5 tarefas simultaneamente, listadas a seguir na figura 3:

 

Exemplo de ambiente multi-tarefa.
Figura 2 - Exemplo de ambiente multi-tarefa.

Nosso embarcado precisa fazer todas essas tarefas simultaneamente, sem que uma atrase a outra, já que implicaria em falha crítica. Nesse sistema, dados são colhidos através de entradas digitais e analógicas, e são enviados através de Modbus, I2C e um Web Server para o usuário, tudo ao mesmo tempo!

 

Programar esse pequeno sistema em Bare Metal (programação sem sistemas operacionais) poderia ser tão complexo, pelo fato de ser necessário efetuar toda sincronização com que uma tarefa não “trave” a outra, que acabaria forçando o desenvolvedor a utilizar mais microcontroladores ou similares para dividir as tarefas entre eles, causando um custo maior no projeto e podendo inviabilizá-lo por custos.

 

RTOS será nossa salvação para problemas em ambientes multi-tarefas. Nos próximos artigos da série vamos aprender e praticar os principais conceitos de RTOS com o FreeRTOS, como Tarefas, Queues (Filas de dados), Semáforos e assim por diante.

 

 

Saiba mais

 

Desenvolvendo um RTOS: Introdução

Implementando elementos de RTOS no Arduino

Criando um projeto no IAR com o FreeRTOS

 

 

Referências

 

https://freertos.org/Documentation/RTOS_book.html

https://en.wikipedia.org/wiki/Operating_system

https://en.wikipedia.org/wiki/Real-time_operating_system

Outros artigos da série

RTOS: Scheduler e Tarefas >>
NEWSLETTER

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

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

José Morais
Estudante de Engenharia da Computação pela USC, pretende se aprimorar e fazer a diferença nesta imensa área da tecnologia. Apaixonado por IoT, sistemas embarcados, microcontroladores e integração da computação nos mais diversos fins práticos e didáticos.

8
Deixe um comentário

avatar
 
5 Comment threads
3 Thread replies
5 Followers
 
Most reacted comment
Hottest comment thread
6 Comment authors
Sara MonteiroPedro Jorge Lima da SilvaF813José MoraisAlexandre Venito Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Sara Monteiro
Visitante
Sara

Olá José!
Venho acompanhando alguns posts seus!
Parabéns pela iniciativa, tem me ajudado muito!
Comecei a usar o ESP no arduino e as vezes acessava o main.cpp e modificava diretamente de lá. Mas sempre ficava presa na IDE do arduino para compilar e carregar.
Agora descobri e instalei o ESP-IDF nativo, mas não consigo importar e usar as muitas bibliotecas prontas disponíveis no git para IDE do arduino para interfacear periféricos. Sei que usando o ESP-IDF configuramos um IDF-PATH voltando apenas para a pasta com as bibliotecas do SDK. Você já tentou algo do tipo? Tem alguma dica para me dar?
Obrigada!

Pedro Jorge Lima da Silva
Membro
Pedro Jorge Lima da Silva

Qual IDE será utilizada para programar a ESP32?

F813
Visitante
F813

Artigo bacana!

Um detalhe que talvez fique melhor: GPOS está mais pra General Purpose Operating System (de propósito geral) do que pra Generic Purpose Operating system; este último termo não é muito frequente...

Alexandre Venito
Visitante
Alexandre Venito

Muito bom. Parabéns pela iniciativa!

Jonathan Gonzaga
Membro
JON9507

Só um pequeno detalhe: Linux não é um sistema operacional, é um kernel genérico (GNU/Linux). Sistema operacional seriam aqueles criados apartir do Linux (Ubuntu, Arch Linux, Kali Linux).