Lançado o FreeRTOS 8.2.0!

FreeRTOS 8 bare-metal

Quem não conhece o sistema operacional de tempo-real FreeRTOS? Se você nunca teve contato com ele, aconselho que o faça! Quando usar um sistema operacional de tempo-real num projeto é uma questão muito subjetiva. Sendo um projeto simples, em que o overhead apresentado por um RTOS é considerável, usar uma solução bare-metal pode ser a melhor escolha. Já em sistemas mais complexos, em que muitas tarefas devem ser executadas, tal como gerenciamento de interfaces externas, memórias, interação com o usuário, etc,  o uso de um kernel torna-se aconselhável, para não dizer necessário.

 

Para aqueles que nunca trabalharam com um sistema operacional de tempo-real, digo que desenvolver um projeto que faça uso desse tipo de serviço traz consigo um pacote de vantagens, tais como:

 

  • Abstração de tempo: o kernel é responsável por executar as tarefas no devido tempo, sem que a aplicação se preocupe com isso;
  • Manutenabilidade, escalabilidade e modularização: cada uma das tarefas criadas pela aplicação é executada isoladamente e, dessa forma, tem a responsabilidade de gerenciar os recursos do seu respectivo módulo;
  • Planejamento de tarefas de uma equipe: uma vez que os módulos do projeto são muito bem definidos, há a necessidade de se estabelecer a interface entre eles. Uma vez que essas atividades são definidas no projeto, ele pode ser alocado entre diferentes membros da equipe e ser desenvolvido em paralelo;
  • Facilidade em realização de testes: os testes de um módulo são mais fáceis de serem executados dado que a sua interface esteja muito bem definida.

 

Muitas outras vantagens podem ser listadas, mas vou focar aqui nas mudanças apresentadas pela nova versão do FreeRTOS, a 8.2.0. Para fazer o seu download, acesse aqui.

 

Mudanças

 

Dentre as mudanças realizadas no kernel, podemos destacar:

 

  • Adição de mais um serviço de comunicação entre tarefas (Inter-task Communication), chamado RTOS Task Notifications;
  • Foi criado o arquivo de cabeçalho FreeRTOS/Source/include/deprecated_definitions.h.

A grande mudança fica por conta do RTOS Task Notifications, criando uma nova alternativa para comunicação de eventos e dados entre as tarefas. Mais detalhes das mudanças feitas podem ser encontrados aqui.

 

Foi criada uma nova API para esse serviço:

 

  • xTaskNotifyGive();
  • vTaskNotifyGiveFromISR();
  • ulTaskNotifyTake();
  • xTaskNotify();
  • xTaskNotifyFromISR();
  • xTaskNotifyWait().

 

O kernel agora disponibiliza para cada tarefa criada um valor de 32 bits, chamado de "notification value", que é inicializado com o valor zero quando a tarefa é criada. A função base xTaskNotify() pode ser utilizada para gerar eventos (notification value) para uma segunda tarefa. A tarefa que recebe o novo valor é removida do estado bloqueado, e o que ela faz com esse dado fica a cargo dela, podendo ser uma das seguintes opções: 

 

  • Atualizar o seu "notification value" interno;
  • Incrementar o valor do seu "notification value";
  • Setar um ou mais bits do seu "notification value";
  • Decidir por deixar o seu "notification value" inalterado.

 

Essas ações são estabelecidas pela função xTaskNotifyWait(), que fica aguardando, dentro de uma tarefa, um evento de uma outra tarefa. Dessa forma esse meio de comunicação pode assumir características de message queue e event group. Além disso, é possível usar esse novo tipo de notificação como semáforos binários e semáforos contadores. Para isso pode-se usar as funções xTaskNotifyGive()vTaskNotifyGiveFromISR()ulTaskNotifyTake()

 

Mas qual a grande vantagem desse novo meio de comunicação entre tarefas? De acordo com o pessoal da Real Time Engineers Ltd. existem duas grandes vantagens:

 

  • Proporciona flexibilidade ao design do projeto, já que task notifications pode ser utilizado onde antes tinha que ser criada uma fila de mensagem, um semáforo binário, um semáforo contador ou um event group;
  • Tirar uma tarefa do estado bloqueado por meio de task notification é 45% mais rápido e usa menos memória RAM que realizar a mesma tarefa usando um semáforo binário, por exemplo.

O arquivo de cabeçalho deprecated_definitions.h foi adicionado para não ser usado! Pois é, está lá só para compilar projetos antigos. Não façam uso das definições contidas nesse arquivo! Vejam os comentários contidos no arquivo portable.h do kernel:

 

 

Teremos mais artigos no Embarcados envolvendo o uso do FreeRTOS em projetos. E aí, gostaram dessa nova feature do FreeRTOS?

 

Referências

 

http://www.freertos.org/index.html

http://sourceforge.net/projects/freertos/files/latest/download?source=files

http://www.freertos.org/RTOS-task-notifications.html

http://www.freertos.org/History.txt

 

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.

Henrique Rossi
Engenheiro eletricista com ênfase em eletrônica e pós-graduado em Engenharia de Software. Comecei um mestrado, mas o interrompi. Especialista na área de sistemas embarcados, com mais de 12 anos de experiência em desenvolvimento de firmware (sistemas baremetal e baseados em RTOS) e Linux Embarcado. Atualmente sou administrador do site Embarcados, trabalho num fabricante de Set-Top Box e atuo como consultor/desenvolvedor na área de sistemas embarcados.

2
Deixe um comentário

avatar
 
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
Henrique RossiRafael Dias Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Rafael Dias
Visitante
Rafael Dias

Estou usando intensamente o FreeRTOS em dois projetos que estou tocando. A flexibilidade e reusabilidade que ele coloca no código fonte é tremenda.
Todos os pontos elencados por você no artigo, em relação ao aumento da produção e qualidade de código, foram também observados por mim durante o desenvolvimento dos projetos.

Agora, sobre estas novas implementações do FreeRTOS na nova versão: achei fantástico.
O ruim é que vou acabar investindo um tempo para entender como funciona tudo isso... hehehe

Henrique Rossi
Visitante

Pois é Rafael, tem vindo novidades nesse kernel, e a tendência é crescer mais. É difícil manter o passo!! Essa última é como um canivete suiço, multi-utilizadades rs.

Abraços