DEV Community

Isaias Velasquez
Isaias Velasquez

Posted on

Aprendendo FreeRTOS, parte 1

O logotipo do FreeRTOS — Wikipedia

Esta é a primeira parte de uma série de artigos que escrevo no formato de notas de estudo, da perspectiva de quem está aprendendo, de um estudante normal de engenharia elétrica que pretende trabalhar com sistemas embarcados ao mesmo tempo que quer ajudar e inspirar outras pessoas a difundir o conhecimento.

O livro que adotei como principal referência para este trabalho é o ‘Mastering the FreeRTOS kernel’, da própria RealTimeEngineers, que pode ser baixado aqui.

Que fique anotado que a edição deste livro ainda não cobre a versão 9.0+ do sistema. No entanto, não tenho ideia (mas que fique como dado a ser acrescido aqui!) da versão que foi portada para o ESP32 mais recente até o momento em seu framework oficial: O ESP-IDF, disponível no Github da própria Espressif.

Existe uma explicação sobre soft-realtime e hard-realtime que julgo interessante adicionar:

  • Requisitos de Soft-Realtime são aqueles em que a inexatidão cronológica não quebrará seu sistema, ou seja, não tornarão o sistema inútil. Por exemplo, responder a pressionamentos de teclas devagar demais pode deixar o sistema irritantemente irresponsivo, mas não inutilizado.

  • Requisitos de Hard-Realtime são aqueles em que se os tempos não forem respeitados, haverá uma inutilização do sistema. Por exemplo, um motorista pode se machucar mais que o previsto se os airbags responderem aos sensores de choque muito lentamente.

No FreeRTOS, cada instância de execução é chamada de ‘task’ (tarefa) e não há consenso em relação à terminologia a ser utilizada, mas seus criadores assim preferem por ‘instância’ ter um sentido mais específico em outros campos de aplicação.

Por que usar um Kernel de Tempo Real?

Como diz o livro, existem diversas técnicas para escrever-se um bom software embarcado sem a necessidade de um kernel, e se o sistema a ser desenvolvido for simples, essas técnicas poderão prover as soluções mais apropriadas. Em casos mais complexos, é *provável **que seja melhor usar um *kernel, mas o limiar entre os casos sempre será subjetivo.

Vantagens de se utilizar um sistema operacional de tempo real (RTOS):

  • Capacidade de se priorizar uma task. Com o recurso de priorizar uma task pode-se cumprir os deadlines (datas-limite) tanto de requisitos hard-realtime quanto soft-realtime.

  • Abstração da informação de timing (temporização). O kernel é responsável pelo timing da execução e provê uma API(Application Programming Interface) para a aplicação. Isso permite um código mais simples, e menor em sua totalidade.

  • Manutebilidade/extensibilidade. Abstrair detalhes de timing *resulta em menos interdependências entre módulos, e permite ao *software *evoluir de forma predizível e controlada. Além disso, o *kernel é responsável pelo timing, então a aplicação é menos suscetível a mudanças de hardware.

  • Modularidade. *Tasks *são módulos independentes, onde cada uma tem um propósito bem definido.

  • Desenvolvimento em Times. Tasks devem ter interfaces bem definidas, permitindo um desenvolvimento mais fácil pelos times.

  • Facilidade de teste. Se as *tasks *são módulos bem definidos, independentes, e com interfaces limpas, podem ser testadas isoladamente.

  • Reuso de código, eficiência melhorada, tarefa de tempo livre, gerenciamento de energia e requisitos de processamento mistos são mais algumas vantagens que podem auxiliar muito no desenvolvimento do sistema.

Principais recursos do FreeRTOS

Por padrão temos os seguintes recursos no FreeRTOS:

  • Operação preemptiva ou cooperativa;

  • Atribuição muito flexível de prioridade das tasks;

  • Mecanismo flexível, rápido e leve de notificação de tasks;

  • Queues (Filas);

  • Semáforos binários;

  • Semáforos contadores;

  • Mutexes (Mutual Exclusion — Exclusão mútua);

  • Mutexes recursivos;

  • *Timers *de software;

  • Grupos de eventos;

  • Funções de gancho de tick;

  • Funções de gancho de tempo ocioso(idle);

  • Checagem de estouro de pilha (Stack Overflow);

  • Gravação de rastro(trace);

  • Coleta de estatísticas de task em tempo de execução;

  • Opção de licença comercial e suporte;

  • Modelo de aninhamento de interrupções completo (para algumas arquiteturas);

  • Capacidade de uso sem ciclos para aplicações de baixíssimo consumo de energia;

  • Pilha de interrupções gerenciadas por software, se apropriado (pode ajudar a economizar no uso de RAM);

Por agora é só. Na parte 02 iremos iniciar o capítulo 01 do livro: A distribuição FreeRTOS

Top comments (0)