Tarefas no MQX RTOS

Escalonador no MQX RTOS tarefas
Este post faz parte da série NXP MQX RTOS. Leia também os outros posts da série:

Olá caros leitores, continuando com a série de artigos sobre o MQX RTOS. No primeiro artigo foi apresentado o MQX RTOS e também criamos um projeto para FRDM-K22F.

Este artigo tem o intuito de apresentar um dos componentes mais importante de um RTOS, a tarefa (task). E serão apresentados alguns dos recursos que o MQX RTOS oferece para a sua manipulação. E, por fim, vamos trabalhar com o projeto que criamos. Utilizaremos a API para criar três tarefas, cada uma será responsável em acionar uma cor do LED RGB da Freedom Board K22F.

Task – Tarefa

Como já foi apresentado no primeiro artigo, as tarefas no MQX RTOS ou em qualquer outro RTOS se comporta como um programa independente das outras tarefas do sistema e fica a cargo do escalonador (será abordado com mais detalhe no próximo artigo) gerenciar o processamento de cada tarefa.

O MQX RTOS permite a criação de tarefas durante a sua execução. A aplicação pode alterar os atributos de uma tarefa em tempo de execução por meio de API’s fornecida pelo o MQX RTOS.

Uma tarefa quando é finalizada ou destruída todos os seus recursos (memória alocada dinamicamente, messages, mutexes, semáforos, etc) alocados serão automaticamente desalocados.

Normalmente uma tarefa é implementada com um loop infinito. A grande maioria das aplicações não retorna nada (void). A seguir temos um exemplo com esqueleto de uma tarefa.

Estados das Tarefas no MQX RTOS

As tarefas no MQX RTOS possuem quatro estados:

  • Bloqueada (Blocked) – tarefa aguardando um evento ou outra tarefa alterar o seu estado para pronta;
  • Pronta (Ready) – é uma tarefa pronta para ser executada, mas que não esta ativa;
  • Ativa (Active) – tarefa em execução;
  • Finalizada (Terminated) – tarefa finalizada, porém os seus recursos ainda não foram deslocados pelo kernel do MQX.
Estados das tarefas no MQX RTOS.
Figura 1 – Estados das tarefas no MQX RTOS.

Atributos de tarefas

As tarefas no MQX possuem os seguintes atributos:

  • MQX_AUTO_START_TASK: tarefa é inicializa quando o MQX é iniciado;
  • MQX_DSP_TASK: atribuem os registradores do DSP no contexto da tarefa;
  • MQX_FLOATING_POINT_TASK: atribuem os registradores da FPU no contexto da tarefa;
  • MQX_TIME_SLICE_TASK: habilita o escalonador do tipo Round Robin.

Task Template List – Templates de Tarefas

No Task Tamplate List (Templates de Tarefas) é onde são informados os parâmetros de cada tarefa ao MQX RTOS. Isso é através do vetor MQX_template_list[]. A seguir temos a lista de parâmetros que devem ser preenchidos no template de tarefas:

  • Task number – O némero da tarefa;
  • Entry point – A função da tarefa;
  • Stack – O tamanho da tarefa;
  • Priority – A prioridade da tarefa;
  • String – A string da tarefa;
  • Attributes – Atributo da tarefa;
  • Parameter – Parâmetro para tarefa;
  • Time Slice – Tempo de execução (para política de escalonamento Round Robin).

Trabalhando com a Tarefa

Como já dissemos no início, iremos continuar com o projeto que criamos, vamos desenvolver uma aplicação que aciona o LED RGB presente na Freedom Board K22F. Serão desenvolvidas quatro tarefas. Serão três tarefas para acionar o LED, sendo uma para cada cor do LED RGB, e a última tarefa será responsável em inicializar os periféricos da placa e criar as demais tarefas.

Abra o arquivo main.h, onde criaremos ao protótipo da função de cada tarefa.

Abra o arquivo main.h. Neste arquivo iremos implementar o algoritmo da nossa aplicação.

Conclusão

Aplicação que acabamos de implementar foi possível explorar recursos de algumas API para a manipulação das tarefas no MQX RTOS. Também utilizamos recursos do KSDK para acionar o LED RGB. Nos próximos artigos iremos explorar recursos de outros componentes do MQX.

Para saber mais sobre MQX RTOS

Este artigo teve como referência os slides do treinamento do Sergio Prado sobre MQX RTOS.

Referências

MQX™ Software Solutions
MQX™ RTOS for Kinetis SDK v1.3
MQX Lite ™ RTOS – Reference Manual

Fonte das Imagens: NXP MQX™ RTOS

Treinamento do Sergio Prado sobre o MQX RTOS

Outros artigos da série

<< Introdução ao NXP MQX RTOSEscalonador no MQX RTOS (Scheduling) >>
Veja + conteúdo

Desenvolvedor de Sistemas Embarcados.
Sou formado Técnico em Instrumentação e Automação Industrial/Mecatrônica pelo Colégio Salesiano Dom Bosco de Americana-SP, cursei o Engenharia Elétrica com Ênfase em Eletrônica pela UNISAL Centro Universitário Salesiano de São Paulo e atualmente estou cursando Superior de Tecnologia em Análise e Desenvolvimento de Sistemas pela UNIP Universidade Paulista.

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.

Comentários:
Notificações
Notificar
guest
3 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Sergio Prado
09/02/2016 15:37

Olá Evandro,

Me parece que você usou como referência os slides do meu treinamento:

– tem muitas frases bem parecidas.
– os prototipos das funções são os mesmos que uso no material do treinamento (inclusive você esqueceu de traduzir os comentários dos protótipos das últimas 3 funções, mantendo exatamente os comentários que estão nos meus slides).
– o diagrama que explica os estados de uma tarefa está identico.

Neste caso, por favor coloque como referências os slides do treinamento da Embedded Labworks.

https://e-labworks.com/treinamentos/mqx/slides

Obrigado,

Sergio Prado

Evandro Teixeira
Evandro Teixeira
Reply to  Sergio Prado
10/02/2016 08:22

Ola Sergio,

Me desculpe.
Já foi incluído a referência aos slides do treinamento da Embedded Labworks.

Sergio Prado
Reply to  Evandro Teixeira
10/02/2016 16:26

OK Evandro, obrigado.

Talvez você goste:

Séries



Outros da Série

Menu