Este livro tem como objetivo servir de referência técnica e didática na área de sistemas operacionais de tempo real (RTOS) e na sua utilização nos projetos de sistemas embarcados.
É voltado ao ensino de sistemas embarcados nos cursos de Engenharia Elétrica, Eletrônica, Computação, Controle e Automação, Telecomunicações, cursos técnicos, bem como para profissionais que atuam na área de sistemas embarcados. Além disso, visa preencher uma lacuna identificada pelos autores na bibliografia referente ao tema, refletida na pouca oferta de livros didáticos na área de sistemas embarcados e, especialmente, com relação aos sistemas operacionais de tempo real.
A familiaridade do leitor com a linguagem utilizada nos exemplos facilita o aprendizado, bem como o aproxima das implementações reais. Ainda, o uso massivo de exemplos faz o livro ter um propósito que vai além da leitura, pois o torna uma referência prática de consulta no dia a dia dos profissionais da área e dos estudantes na elaboração de projetos realizados durante as disciplinas da graduação, em atividades extraclasse, em grupos de pesquisa e em projetos de conclusão de curso.
Figuras
Tabelas
Listagens
1 Introdução aos sistemas de tempo real
1.1 Sistemas foreground/background
1.2 Sistemas operacionais
1.3 Motivações para sistemas operacionais de tempo real
1.4 Definições relativas a sistemas operacionais
1.4.1 Tarefas, corrotinas, processos e threads
1.4.2 Prioridades
1.4.3 Sistemas multitarefas
1.4.4 Recursos
1.4.5 Núcleo (kernel)
1.4.6 Reentrância e funções seguras
1.4.7 Variáveis globais voláteis e estáticas
1.5 Resumo
1.6 Problemas
2 Sistemas operacionais de tempo real
2.1 Núcleo não preemptivo
2.2 Núcleo preemptivo
2.3 Bloco de controle de tarefas
2.4 Marca de tempo (timer tick)
2.5 Interrupções e exceções em sistemas de tempo real
2.6 Inversão de prioridades
2.7 Seções críticas de código e exclusão mútua
2.8 Deadlock (impasse)
2.9 Sobrecarga (overload)
2.10 Vantagens e desvantagens de núcleos de tempo real
2.11 Sistemas operacionais de tempo real BRTOS e FreeRTOS
2.12 Resumo
2.13 Problemas
3 Gerenciamento de tarefas
3.1 Instalação de tarefas
3.2 Inicialização de sistemas operacionais de tempo real
3.3 Escalonamento de tarefas
3.3.1 Escalonamento dirigido por tempo
3.3.1.1 FIFO e SJF
3.3.1.2 Executivo cíclico
3.3.1.3 Round-robin
3.3.2 Escalonamento dirigido por prioridades
3.3.2.1 Escalonamento por taxa monotônica
3.3.2.2 Escalonamento por “prazo monotônico” e “prazo mais cedo primeiro”
3.3.3 Gerenciamento de tarefas aperiódicas
3.3.4 Aspectos práticos na implementação de escalonadores
3.3.4.1 µC/OS II
3.3.4.2 BRTOS
3.3.5 Organização de TCB em listas encadeadas: o exemplo do FreeRTOS
3.3.6 Limiar ou threshold de preempção
3.4 Idle task ou tarefa ociosa
3.5 Resumo
3.6 Problemas
4 Objetos básicos do sistema operacional
4.1 Objetos de sincronização
4.1.1 Sincronização de atividades
4.1.1.1 Semáforos
4.1.2 Sincronização de recursos
4.1.2.1 Semáforos de exclusão mútua (mutex)
4.1.3 Grupo de eventos (event groups)
4.2 Objetos de comunicação
4.2.1 Caixas de mensagem (message mailboxes)
4.2.2 Filas de mensagens (message queues)
4.3 Sincronização por múltiplos objetos do sistema (queue sets)
4.4 Notificação de tarefas (task notifications)
4.4.1 Objetos de comunicação sinalizados por notificação de tarefa
4.4.1.1 Stream buffers
4.4.1.2 Message buffers
4.5 Resumo
4.6 Problemas
5 Gerenciamento de tempo
5.1 Temporizadores hard e soft
5.2 Modelos de temporizadores em software (implementação da marca de tempo)
5.3 Temporizadores em software para execução de callbacks
5.4 Implementação de temporizadores em software para execução de callbacks
5.4.1 Gerenciamento de temporizadores com listas ordenadas
5.4.2 Gerenciamento de temporizadores com roda de sincronismo
5.4.3 Gerenciamento de temporizadores com heap binário
5.4.4 Comparação das estratégias de gerenciamento de temporizadores
5.5 Sistemas com suporte ao modo tickless
5.6 Resumo
5.7 Problemas
6 Gerenciamento de memória
6.1 Alocação dinâmica de memória em sistemas embarcados
6.2 Técnicas de alocação dinâmica de memória
6.3 Gerenciamento de memória em RTOS
6.4 Alocação estática de memória no FreeRTOS
6.5 Resumo
6.6 Problemas
7 Arquiteturas de interrupções
7.1 Arquitetura de interrupção unificada
7.2 Arquitetura de interrupção segmentada
7.3 Comparando as duas abordagens
7.3.1 Latência de interrupção
7.3.2 Utilização de recursos
7.3.3 Determinismo
7.3.4 Complexidade
7.3.5 Arquiteturas de interrupção de RTOS conhecidos
7.4 Resumo
7.5 Problemas
8 Desenvolvimento de drivers
8.1 Comunicação serial
8.2 Teclados
8.3 Cartão SD e sistema de arquivos FAT
8.3.1 Sistema de arquivos FAT
8.3.2 FatFs by Chan
8.4 Displays (telas)
8.4.1 Displays gráficos e suporte a touchscreen
8.5 Padronização de drivers
8.6 FreeRTOS+IO
8.7 BRTOS device drivers
8.8 Resumo
8.9 Problemas
9 Projetos de sistemas embarcados baseados em RTOS
9.1 Distribuição do sistema embarcado em tarefas
9.2 Definição de prioridades entre tarefas
9.3 Tarefas periódicas a partir de funções de delay
9.4 Uso da biblioteca padrão do C e seu impacto na pilha das tarefas
9.5 Utilizando funções de callback
9.5.1 Gancho de tarefa ociosa
9.5.2 Gancho de marca de tempo
9.5.3 Gancho de alocação de memória
9.5.4 Gancho de verificação de pilha
9.6 Corrotinas no FreeRTOS
9.7 Ferramentas para monitoramento do sistema
9.7.1 Lista de tarefas com suas principais informações
9.7.2 Estatísticas de tempo de execução
9.8 Shell, console ou terminal
9.8.1 FreeRTOS+CLI
9.8.2 BRTOS Terminal
9.9 Traçamento ou tracing
9.10 Portando um sistema operacional de tempo real
9.11 Abstração de um RTOS a módulos externos
9.12 Configuração de sistemas operacionais de tempo real
9.13 Utilizando uma unidade de proteção de memória
9.14 Gerenciamento de múltiplos núcleos em um RTOS
9.15 Códigos demonstrativos de uso de RTOS
9.15.1 Sistema multitarefa cooperativo com protothreads
9.15.2 Sistema embarcado com alta concorrência
9.15.3 Reprodutor de arquivos de áudioWAV
9.15.4 Exemplo de tarefa gatekeeper
9.16 Resumo
9.17 Problemas
Referências
Índice remissivo
Gustavo Weber Denardin , Carlos Henrique Barriquello