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 |
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.
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.
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.
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.
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.
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.