Agenda - FreeRTOS

Informações gerais

Tópicos principais Introdução a sistemas de tempo real, vantagens do uso de um RTOS, hardware e ambiente de desenvolvimento, introdução ao FreeRTOS, portando e integrando o FreeRTOS, gerenciamento de tarefas, tarefas baseadas em eventos, estados de uma tarefa, prioridades e o escalonador de tarefas, modos preemptivo e colaborativo, interrupção do tick, rotinas de delay, tarefa idle, tickless idle mode, co-routines, comunicação entre tarefas, queues, stream buffers, message buffers, queue sets, mecanismos de notificação, semáforos binários e contadores, task notification, event groups, gerenciamento de interrupção, implementando uma rotina de tratamento de interrupção (ISR), software timers, gerenciamento de concorrência, thread-safe e reentrância, seções críticas e exclusão mútua, mutex, inversão de prioridade e herança de prioridade, deadloks, tarefas gatekeeper, gerenciamento de memória, alocação estática de memória, algoritmos de alocação dinâmica de memória, monitorando o heap, dimensionando e monitorando a pilha, ferramentas de suporte, exibindo informações sobre as tarefas em execução, estatísticas de execução, tracing, kernel aware debugging, simuladores e emuladores, projetando sistemas com o FreeRTOS, considerações finais e encerramento
Duração 3 dias - 24 horas - 50% de teoria e 50% de prática
Instrutor Sergio Prado
Público-alvo Estudantes, engenheiros, desenvolvedores e líderes de equipes de desenvolvimento de software para sistemas embarcados
Pré-requisitos Conhecimentos básicos de sistemas embarcados, desenvolvimento de firmware bare-metal para microcontroladores, conhecimentos intermediários de linguagem C
Material de estudo O material de estudo é composto pelos slides, o livro de atividades e exercícios, os guias de referência e documentos de estudo adicional. Todo o material é fornecido de forma eletrônica no início do treinamento
Kit de desenvolvimento Os kits de desenvolvimento são emprestados aos alunos durante o treinamento para a execução das atividades práticas. É utilizada por padrão a plataforma Freedom da NXP (FRDM-KL46Z), composta por um microcontrolador Kinetis KL46 (ARM Cortex-M0+) e diversas interfaces de comunicação e controle. Se necessário, e conforme a necessidade da empresa contratante, o treinamento pode ser realizado em uma outra plataforma de hardware

Agenda detalhada

Dia 1 - manhã


Apresentação: Introdução a sistemas de tempo real - tipos de sistemas de tempo real, sistemas foreground/background, deficiências do super-loop, o kernel de tempo real, sistemas multitarefa, trocas de contexto, escalonador de tarefas, políticas de escalonamento, vantagens do uso de um RTOS.

Apresentação: Hardware e ambiente de desenvolvimento - placas Freedom, kit de desenvolvimento FRDM-KL46Z, ambiente de desenvolvimento, MCUXpresso IDE e SDK, documentação e referências.

Laboratório: Explorando o ambiente de desenvolvimento - neste exercício iremos explorar o ambiente de desenvolvimento do target, aprendendo a criar projetos com o MCUXpresso IDE, desenvolver e depurar aplicações, e utilizar as rotinas da HAL para acesso ao hardware do target (LEDs, botões, display LCD, RTC, acelerômetro, etc).

Apresentação: Introdução ao FreeRTOS - histórico, FreeRTOS e Amazon FreeRTOS, posição no mercado, características, código-fonte e padrão de codificação, convenções, licença, OpenRTOS e SafeRTOS, portando e integrando o FreeRTOS.

Laboratório: Integrando o FreeRTOS - neste exercício aprenderemos a configurar e integrar o código-fonte do FreeRTOS em uma aplicação para o target.

Dia 1 - tarde


Apresentação: Gerenciamento de tarefas - o que é uma tarefa, criando e excluindo tarefas, tarefas baseadas em eventos, estados de uma tarefa, prioridades, escalonador de tarefas, modos preemptivo e colaborativo, interrupção do tick, tick interrupt hook, rotinas de delay, tarefa idle, idle task hook, economia de energia e tickless idle mode, co-routines.

Laboratório: Trabalhando com tarefas - nesta atividade aprenderemos a criar e gerenciar tarefas no FreeRTOS, incluindo a análise do comportamento dos diferentes modos de escalonamento, prioridades, uso de rotinas de delay e implementação da Idle Task Hook.

Apresentação: Comunicação entre tarefas - queues, lendo e escrevendo em queues, stream buffers, message buffers, queue sets.

Laboratório: Implementando comunicação entre tarefas - nesta atividade aprenderemos a implementar a comunicação entre tarefas utilizando Queues e Stream Buffers.

Dia 2 - manhã


Apresentação: Mecanismos de notificação - semáforos binários, semáforos contadores, gerenciando acesso a recursos com semáforos, task notifications, event groups.

Laboratório: Implementando sincronização entre tarefas - nesta atividade aprenderemos a sincronizar tarefas através de semáforos binários, semáforos contadores e task notification.

Apresentação: Gerenciamento de interrupção - eventos de hardware, introdução ao tratamento de interrupção no ARM Cortex-M, implementando uma rotina de tratamento de interrupção (ISR), top-half e bottom-half, delegando o tratamento de interrupções para tarefas, técnicas de transferência de dados, interrupções utilizadas pelo FreeRTOS e configuração de prioridade.

Laboratório: Implementando tratamento de interrupção - nesta atividade aprenderemos a sincronizar interrupções e tarefas, utilizando a API do FreeRTOS para delegar o tratamento de interrupções para tarefas da aplicação.

Dia 2 - tarde


Apresentação: Software timers - introdução a software timers, habilitando e configurando software timers, tipos de software timers, tratando interrupções em timers, daemon task startup hook.

Laboratório: Trabalhando com software timers - nesta atividade aprenderemos a trabalhar com a API de software timers do FreeRTOS.

Apresentação: Gerenciamento de concorrência - recursos compartilhados e a necessidade de gerenciamento de concorrência, thread-safe e reentrância, seções críticas e exclusão mútua, mutex, mutex recursivo, desabilitando as interrupções, pausando o escalonador, inversão de prioridade, herança de prioridade, deadloks, tarefas gatekeeper.

Laboratório: Gerenciando concorrência - nesta atividade aprenderemos a proteger e controlar o acesso concorrente a recursos compartilhados com mutex e tarefas Gatekeeper.

Dia 3 - manhã


Apresentação: Gerenciamento de memória - vantagens e desvantagens de alocação estática e alocação dinâmica, funções de alocação estática de memória, algoritmos de alocação dinâmica de memória, fragmentação de memória, monitorando o heap, dimensionando e monitorando o uso da pilha, identificando estouro de pilha (stack overflow).

Laboratório: Configurando e gerenciando a memória - nesta atividade aprenderemos a monitorar e gerenciar o heap e o stack de uma aplicação com o FreeRTOS.

Apresentação: Ferramentas de suporte - exibindo informações sobre as tarefas em execução, habilitando Run Time Statistics, tracing, trace hook macros, kernel aware debugging, simuladores e emuladores.

Laboratório: Utilizando ferramentas de suporte - nesta atividade aprenderemos a utilizar a API do FreeRTOS para coletar informações sobre a execução das tarefas da aplicação.

Dia 3 - tarde


Apresentação: Projetando com o FreeRTOS - dividindo o sistema em tarefas, definindo prioridades, técnica RMS (Rate Monotonic Scheduling), dimensionando o stack, alocação de memória, comunicação entre tarefas, tratamento de interrupção, escolhendo o escalonador.

Laboratório: Projeto final - nesta atividade iremos modelar e implementar um projeto completo com o FreeRTOS, abordando os principais conceitos estudados no treinamento.

Apresentação: Considerações finais - links e recursos adicionais, recomendações de livros, dúvidas e comentários finais, encerramento.