Documento: pdf (55 páginas) 2.8 MB SISTEMAS OPERACIONAIS DE TEMPO REAL E SUA APLICAÇÃO EM SISTEMAS EMBARCADOS SISTEMAS OPERACIONAIS DE TEMPO REAL E SUA APLICAÇÃO EM SISTEMAS EMBARCADOS 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. DENARDIN | BARRIQUELLO GUSTAVO WEBER DENARDIN CARLOS HENRIQUE BARRIQUELLO CONTEÚDO 1 Introdução aos sistemas de tempo real 2 Sistemas operacionais de tempo real 3 Gerenciamento de tarefas 4 Objetos básicos do sistema operacional 5 Gerenciamento de tempo 6 Gerenciamento de memória 7 Arquiteturas de interrupções 8 Desenvolvimento de drivers 9 Projetos de sistemas embarcados baseados em RTOS Referências Índice remissivo GUSTAVO WEBER DENARDIN É graduado (2002), mestre (2004) e doutor (2012) em Engenharia Elétrica pela Universidade Federal de Santa Maria (UFSM). Professor associado na Universidade Tecnológica Federal do Paraná (UTFPR) desde 2005, atua nos cursos de Engenharia Elétrica, Engenharia de Computação e no Programa de Pós-Graduação em Engenharia Elétrica, para os quais ministra as disciplinas de sistemas embarcados, oficina de integração e instrumentação eletroeletrônica. É pesquisador no grupo de pesquisa PROCEN, com interesse nos seguintes temas: sistemas embarcados e de tempo real, redes e sistemas de comunicação de dados, redes de sensores sem fio e sistemas de iluminação inteligentes. Também é um dos desenvolvedores do BRTOS, um RTOS brasileiro disponibilizado em código aberto e gratuito. CARLOS HENRIQUE BARRIQUELLO Graduado (2007), mestre (2009) e doutor (2012) em Engenharia Elétrica pela Universidade Federal de Santa Maria (UFSM). É professor adjunto IV no Departamento de Eletrônica e Computação da UFSM desde 2012 e atua em cursos de Engenharia Elétrica, Engenharia de Computação e e Engenharia de Telecomunicações, ministrando as disciplinas de comunicações de dados, telecomunicações, redes de computadores e projetos de sistemas embarcados. É pesquisador no grupo GEDRE, interessando-se principalmente em sistemas embarcados e de tempo real, redes e sistemas de comunicação de dados, redes de sensores sem fio, sistemas ciberfísicos e sistemas de iluminação inteligentes. Também é um dos desenvolvedores do BRTOS. C M Y CM MY CY CMY K Capa_Denardin_sistemas operacionais_P4.pdf 1 11/02/2019 23:02:08 Gustavo Weber Denardin Carlos Henrique Barriquello Sistemas operacionais de tempo real e sua aplicação em sistemas embarcados Sistemas operacionais de tempo real e sua aplicação em sistemas embarcados © 2019 Gustavo Weber Denardin e Carlos Henrique Barriquello Editora Edgard Blücher Ltda. Ilustrações Gustavo Weber Denardin e Carlos Henrique Barriquello Rua Pedroso Alvarenga, 1245, 4◦ andar 04531-934 – São Paulo – SP – Brasil Tel.: 55 11 3078-5366 www.blucher.com.br Segundo o Novo Acordo Ortográfico, conforme 5. ed. do Vocabulário Ortográfico da Língua Portuguesa, Academia Brasileira de Letras, março de 2009. É proibida a reprodução total ou parcial por quaisquer meios sem autorização escrita da editora. Todos os direitos reservados pela Editora Edgard Blücher Ltda. Dados Internacionais de Catalogação na Publicação (CIP) Angélica Ilacqua CRB-8/7057 Denardin, Gustavo Weber Sistemas operacionais de tempo real e sua aplicação em sistemas embarcados / Gustavo Weber Denardin, Carlos Henrique Barriquello. – São Paulo : Blucher, 2019. 474 p. : il. Bibliografia ISBN 978-85-212-1396-3 (impresso) ISBN 978-85-212-1397-0 (e-book) 1. Processamento eletrônico de dados em tempo real 2. Sistemas embarcados (Computadores) 3. Sistemas operacionais (Computadores) I. Título II. Barriquello, Carlos Henrique 19-0129 CDD 005.43 Índice para catálogo sistemático: 1. Sistemas operacionais (Computadores) Imagem da capa iStockphoto Conteúdo Figuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Tabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Listagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 1 Introdução aos sistemas de tempo real . . . . . . . . . . . . . 37 1.1 Sistemas foreground/background . . . . . . . . . . . . . . . . . . . 39 1.2 Sistemas operacionais . . . . . . . . . . . . . . . . . . . . . . . . 42 1.3 Motivações para sistemas operacionais de tempo real . . . . . . 43 1.4 Definições relativas a sistemas operacionais . . . . . . . . . . . . 52 1.4.1 Tarefas, corrotinas, processos e threads . . . . . . . . . . . 52 1.4.2 Prioridades . . . . . . . . . . . . . . . . . . . . . . . . . . 60 1.4.3 Sistemas multitarefas . . . . . . . . . . . . . . . . . . . . 60 1.4.4 Recursos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 1.4.5 Núcleo (kernel) . . . . . . . . . . . . . . . . . . . . . . . . 62 1.4.6 Reentrância e funções seguras . . . . . . . . . . . . . . . . 70 1.4.7 Variáveis globais voláteis e estáticas . . . . . . . . . . . . 75 1.5 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 1.6 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 2 Sistemas operacionais de tempo real . . . . . . . . . . . . . . 83 2.1 Núcleo não preemptivo . . . . . . . . . . . . . . . . . . . . . . . 84 2.2 Núcleo preemptivo . . . . . . . . . . . . . . . . . . . . . . . . . . 86 2.3 Bloco de controle de tarefas . . . . . . . . . . . . . . . . . . . . . 88 2.4 Marca de tempo (timer tick) . . . . . . . . . . . . . . . . . . . . . 90 2.5 Interrupções e exceções em sistemas de tempo real . . . . . . . . 95 2.6 Inversão de prioridades . . . . . . . . . . . . . . . . . . . . . . . 101 2.7 Seções críticas de código e exclusão mútua . . . . . . . . . . . . 105 2.8 Deadlock (impasse) . . . . . . . . . . . . . . . . . . . . . . . . . . 107 14 Sistemas operacionais de tempo real e sua aplicação em sistemas embarcados 2.9 Sobrecarga (overload) . . . . . . . . . . . . . . . . . . . . . . . . . 108 2.10 Vantagens e desvantagens de núcleos de tempo real . . . . . . . 109 2.11 Sistemas operacionais de tempo real BRTOS e FreeRTOS . . . . 110 2.12 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 2.13 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 3 Gerenciamento de tarefas . . . . . . . . . . . . . . . . . . . . . . 117 3.1 Instalação de tarefas . . . . . . . . . . . . . . . . . . . . . . . . . 121 3.2 Inicialização de sistemas operacionais de tempo real . . . . . . . 128 3.3 Escalonamento de tarefas . . . . . . . . . . . . . . . . . . . . . . 130 3.3.1 Escalonamento dirigido por tempo . . . . . . . . . . . . . 133 3.3.1.1 FIFO e SJF . . . . . . . . . . . . . . . . . . . . . . 133 3.3.1.2 Executivo cíclico . . . . . . . . . . . . . . . . . . 135 3.3.1.3 Round-robin . . . . . . . . . . . . . . . . . . . . . 138 3.3.2 Escalonamento dirigido por prioridades . . . . . . . . . 140 3.3.2.1 Escalonamento por taxa monotônica . . . . . . 142 3.3.2.2 Escalonamento por “prazo monotônico” e “prazo mais cedo primeiro” . . . . . . . . . . . . . . . 148 3.3.3 Gerenciamento de tarefas aperiódicas . . . . . . . . . . . 151 3.3.4 Aspectos práticos na implementação de escalonadores . 155 3.3.4.1 µC/OS II . . . . . . . . . . . . . . . . . . . . . . 157 3.3.4.2 BRTOS . . . . . . . . . . . . . . . . . . . . . . . . 161 3.3.5 Organização de TCB em listas encadeadas: o exemplo do FreeRTOS . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 3.3.6 Limiar ou threshold de preempção . . . . . . . . . . . . . 172 3.4 Idle task ou tarefa ociosa . . . . . . . . . . . . . . . . . . . . . . . 176 3.5 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 3.6 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 4 Objetos básicos do sistema operacional . . . . . . . . . . . . 181 4.1 Objetos de sincronização . . . . . . . . . . . . . . . . . . . . . . . 182 4.1.1 Sincronização de atividades . . . . . . . . . . . . . . . . 182 4.1.1.1 Semáforos . . . . . . . . . . . . . . . . . . . . . . 186 4.1.2 Sincronização de recursos . . . . . . . . . . . . . . . . . . 191 4.1.2.1 Semáforos de exclusão mútua (mutex) . . . . . . 196 4.1.3 Grupo de eventos (event groups) . . . . . . . . . . . . . . . 202 4.2 Objetos de comunicação . . . . . . . . . . . . . . . . . . . . . . . 210 Conteúdo 15 4.2.1 Caixas de mensagem (message mailboxes) . . . . . . . . . . 212 4.2.2 Filas de mensagens (message queues) . . . . . . . . . . . . 218 4.3 Sincronização por múltiplos objetos do sistema (queue sets) . . . 226 4.4 Notificação de tarefas (task notifications) . . . . . . . . . . . . . . 229 4.4.1 Objetos de comunicação sinalizados por notificação de tarefa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 4.4.1.1 Stream buffers . . . . . . . . . . . . . . . . . . . . 234 4.4.1.2 Message buffers . . . . . . . . . . . . . . . . . . . 238 4.5 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 4.6 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 5 Gerenciamento de tempo . . . . . . . . . . . . . . . . . . . . . . . 245 5.1 Temporizadores hard e soft . . . . . . . . . . . . . . . . . . . . . . 246 5.2 Modelos de temporizadores em software (implementação da marca de tempo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 5.3 Temporizadores em software para execução de callbacks . . . . . 256 5.4 Implementação de temporizadores em software para execução de callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 5.4.1 Gerenciamento de temporizadores com listas ordenadas 259 5.4.2 Gerenciamento de temporizadores com roda de sincro- nismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 5.4.3 Gerenciamento de temporizadores com heap binário . . . 265 5.4.4 Comparação das estratégias de gerenciamento de tempori- zadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 5.5 Sistemas com suporte ao modo tickless . . . . . . . . . . . . . . . 272 5.6 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 5.7 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 6 Gerenciamento de memória . . . . . . . . . . . . . . . . . . . . . 277 6.1 Alocação dinâmica de memória em sistemas embarcados . . . . 279 6.2 Técnicas de alocação dinâmica de memória . . . . . . . . . . . . 282 6.3 Gerenciamento de memória em RTOS . . . . . . . . . . . . . . . 286 6.4 Alocação estática de memória no FreeRTOS . . . . . . . . . . . . 294 6.5 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 6.6 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 7 Arquiteturas de interrupções . . . . . . . . . . . . . . . . . . . . 299 7.1 Arquitetura de interrupção unificada . . . . . . . . . . . . . . . . 302 16 Sistemas operacionais de tempo real e sua aplicação em sistemas embarcados 7.2 Arquitetura de interrupção segmentada . . . . . . . . . . . . . . 305 7.3 Comparando as duas abordagens . . . . . . . . . . . . . . . . . . 315 7.3.1 Latência de interrupção . . . . . . . . . . . . . . . . . . . 316 7.3.2 Utilização de recursos . . . . . . . . . . . . . . . . . . . . 317 7.3.3 Determinismo . . . . . . . . . . . . . . . . . . . . . . . . . 318 7.3.4 Complexidade . . . . . . . . . . . . . . . . . . . . . . . . . 319 7.3.5 Arquiteturas de interrupção de RTOS conhecidos . . . . 319 7.4 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 7.5 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 8 Desenvolvimento de drivers . . . . . . . . . . . . . . . . . . . . . 323 8.1 Comunicação serial . . . . . . . . . . . . . . . . . . . . . . . . . . 325 8.2 Teclados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 8.3 Cartão SD e sistema de arquivos FAT . . . . . . . . . . . . . . . 332 8.3.1 Sistema de arquivos FAT . . . . . . . . . . . . . . . . . . . 334 8.3.2 FatFs by Chan . . . . . . . . . . . . . . . . . . . . . . . . . 335 8.4 Displays (telas) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 8.4.1 Displays gráficos e suporte a touchscreen . . . . . . . . . . 347 8.5 Padronização de drivers . . . . . . . . . . . . . . . . . . . . . . . . 351 8.6 FreeRTOS+IO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 8.7 BRTOS device drivers . . . . . . . . . . . . . . . . . . . . . . . . . 362 8.8 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 8.9 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 9 Projetos de sistemas embarcados baseados em RTOS . . . 369 9.1 Distribuição do sistema embarcado em tarefas . . . . . . . . . . 370 9.2 Definição de prioridades entre tarefas . . . . . . . . . . . . . . . 376 9.3 Tarefas periódicas a partir de funções de delay . . . . . . . . . . 379 9.4 Uso da biblioteca padrão do C e seu impacto na pilha das tarefas 382 9.5 Utilizando funções de callback . . . . . . . . . . . . . . . . . . . . 382 9.5.1 Gancho de tarefa ociosa . . . . . . . . . . . . . . . . . . . 383 9.5.2 Gancho de marca de tempo . . . . . . . . . . . . . . . . . 384 9.5.3 Gancho de alocação de memória . . . . . . . . . . . . . . 384 9.5.4 Gancho de verificação de pilha . . . . . . . . . . . . . . . 385 9.6 Corrotinas no FreeRTOS . . . . . . . . . . . . . . . . . . . . . . . 387 9.7 Ferramentas para monitoramento do sistema . . . . . . . . . . . 389 9.7.1 Lista de tarefas com suas principais informações . . . . . 389 Conteúdo 17 9.7.2 Estatísticas de tempo de execução . . . . . . . . . . . . . 393 9.8 Shell, console ou terminal . . . . . . . . . . . . . . . . . . . . . . 398 9.8.1 FreeRTOS+CLI . . . . . . . . . . . . . . . . . . . . . . . . 399 9.8.2 BRTOS Terminal . . . . . . . . . . . . . . . . . . . . . . . 404 9.9 Traçamento ou tracing . . . . . . . . . . . . . . . . . . . . . . . . 407 9.10 Portando um sistema operacional de tempo real . . . . . . . . . 411 9.11 Abstração de um RTOS a módulos externos . . . . . . . . . . . . 422 9.12 Configuração de sistemas operacionais de tempo real . . . . . . 429 9.13 Utilizando uma unidade de proteção de memória . . . . . . . . 432 9.14 Gerenciamento de múltiplos núcleos em um RTOS . . . . . . . . 445 9.15 Códigos demonstrativos de uso de RTOS . . . . . . . . . . . . . 449 9.15.1 Sistema multitarefa cooperativo com protothreads . . . . 449 9.15.2 Sistema embarcado com alta concorrência . . . . . . . . . 452 9.15.3 Reprodutor de arquivos de áudio WAV . . . . . . . . . . 455 9.15.4 Exemplo de tarefa gatekeeper . . . . . . . . . . . . . . . . . 464 9.16 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 9.17 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 Índice remissivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 1 Capítulo Introdução aos sistemas de tempo real Sistemas operacionais de tempo real são uma subclasse de sistemas operacio- nais destinados à concepção de sistemas computacionais, geralmente embarcados, em que o tempo de resposta a um evento é fixo e deve ser respeitado sempre que possível. Esses sistemas são conhecidos na literatura como sistemas de tempo real e são caracterizados por possuírem requisitos específicos de sequência lógica e tempo que, se não cumpridos, resultam em falhas no sistema a que se dedicam. Ressalta-se que o tempo de resposta aos eventos controlados em um sistema de tempo real não deve ser necessariamente o mais rápido possível. A prioridade é o cumprimento dos prazos de todos os eventos controlados pelo sistema. Existem dois tipos de sistemas em tempo real: soft e hard. Em um sistema de tempo real soft, o sistema pode continuar funcionando mesmo que restrições temporais não sejam respeitadas. Isso não significa que o sistema irá funcionar corretamente, mas que durante os períodos em que os prazos são perdidos ocorrerá inconsistência em seu funcionamento, voltando a operação correta quando os prazos voltarem a ser cumpridos. Um sistema de aquisição de dados pode ser considerado soft, pois possui restrições temporais, mas a perda de 38 Sistemas operacionais de tempo real e sua aplicação em sistemas embarcados prazos não implica falha geral do sistema. Já sistemas de tempo real hard devem seguir suas restrições temporais rigidamente, de forma a evitar o colapso total do sistema. Normalmente sistemas hard são utilizados em aplicações que estão diretamente relacionadas à vida de pessoas, como o sistema de controle de um avião. A maioria dos sistemas em tempo real existentes utilizam uma combinação de requisitos soft e hard. Normalmente os sistemas em tempo real são embarcados. Isso significa que o sistema computacional é completamente encapsulado e dedicado ao dispositivo ou sistema que controla. Diferentemente de computadores de propósito geral, como o computador pessoal, um sistema embarcado realiza um conjunto de tarefas predefinidas, geralmente com requisitos específicos. Já que o sistema é dedicado a tarefas específicas, pode-se otimizar o projeto reduzindo tamanho, recursos computacionais e custo do produto/produção. Alguns exemplos de sistemas embarcados são: • Automotivos: controle de injeção eletrônica, controle de tração, controle de sistemas de frenagem antibloqueio (ABS) etc.; • Domésticos: micro-ondas, lavadouras de louça, lavadouras de roupa etc.; • Comunicação: telefones celulares, roteadores, equipamentos de GPS etc.; • Robótica: robôs industriais, humanoides, drones etc.; • Aeroespacial e militar: sistemas de gerenciamento de voo, controle de armas de fogo etc.; • Controle de processos: processamento de alimentos, controle de plantas químicas e controle de manufaturas em geral. Este capítulo irá discutir as principais motivações para a utilização de sistemas operacionais de tempo real na concepção de sistemas embarcados, destacando os principais impactos na utilização desse tipo de sistema frente às técnicas tradicionais de projeto. Ainda, descrevem-se os principais conceitos envolvidos em sistemas de tempo real. No texto os termos “processador” e “central processing unit (CPU)” serão utilizados de forma análoga para evitar o uso dos mesmos termos em longas sequências de texto. Introdução aos sistemas de tempo real 39 1.1 Sistemas foreground/background O ensino de projetos de sistemas embarcados usualmente se inicia com siste- mas de baixa complexidade. Isso deve-se ao fato de ser o primeiro contato com uma mudança de paradigma de programação, em que em vez de se projetar um software sequencial, projeta-se um software que responda a eventos. Ademais, provavelmente será o primeiro contato com o projeto de um software que deve executar indefinidamente, enquanto o sistema estiver energizado. Existem vá- rias formas de escrever um código que se comporte dessa maneira. No entanto, devido à sua simplicidade, normalmente começa-se... Comentários para: LIVRO Sistemas Operacionais de Tempo RealQuais são os sistemas operacionais utilizados em sistemas embarcados?Sistemas operacionais/Sistemas embarcados. 1.2.1 TinyOS:. 1.2.2 Contiki.. 1.2.3 VirtuOS:. 1.2.4 QNX:. 1.2.5 Windows CE:. 1.2.6 Exemplos de sistemas embarcados com Linux:. Em que tipo de aplicações são utilizados sistemas operacionais em tempo real?Estes sistemas são utilizados em situações onde a exatidão temporal é tão importante quanto a exatidão lógica de um programa. Por exemplo, suponhamos que você esteja executando um programa que consiste em quatro tarefas. Cada tarefa deve ser concluída em um milissegundo.
Quais os 2 tipos de sistema operacional de tempo real?Sistemas de Tempo Real Críticos e Não-Críticos. A severidade da pena pelo não cumprimento das tarefas num determinado intervalo de tempo é o fator que os distingüe.. O STR Crítico é aquele que tem um comportamento determinístico, ou seja, o prazo para execução de uma tarefa (deadline) não pode ser violado.. O que é um sistema operacional embarcado?Um sistema operacional é dito embarcado ou embutido (em inglês, embedded) quando é construído para operar sobre um hardware com poucos recursos de processamento, armazenamento e energia.
|