- Disciplina: https://matriculaweb.unb.br/graduacao/disciplina.aspx?cod=206181
- Oferta: https://matriculaweb.unb.br/graduacao/oferta_dados.aspx?cod=206181
- Código: 206181
- Créditos: 4
- Turma: A
- Locais e horários: Lab SS, 3as e 5as feiras, sempre das 16:00 às 17:50
- 04/04/2017: entrega do primeiro ponto de controle
- 18/04/2017: primeiro teste
- 02/05/2017: entrega do segundo ponto de controle
- 16/05/2017: segundo teste
- 30/05/2017: entrega do terceiro ponto de controle
- 13/06/2017: entrega do quarto ponto de controle
- 27/06/2017: entrega do projeto final
- Conhecer os fundamentos básicos de sistemas embarcados;
- Compreender o processo de desenvolvimento de software para um sistema embarcado;
- Conhecer as técnicas de desenvolvimento de aplicações e drivers para sistemas embarcados.
- Introdução aos sistemas embarcados
- Introdução ao OS Linux
- Desenvolvimento para sistemas embarcados
- Inicialização de sistemas embarcados
- Subsistema de I/O
- Recursos de sistemas
- Introdução ao RTOS
- Introdução ao LKM
- Introdução aos device drivers
Aulas divididas de acordo com a técnica Pomodoro, com 3 períodos de 25 a 30 minutos, intercalados com descansos de 5 minutos:
- 1o período: aula expositiva do professor;
- 2o período: alunos responderão a perguntas teóricas propostas pelo professor;
- 3o período: alunos responderão a perguntas práticas propostas pelo professor.
Dentro do 2o e do 3o períodos, cada aluno deverá desenvolver ao máximo suas respostas, aproveitando o tempo disponível à exaustão, como esperado na técnica Pomodoro.
Todas as respostas deverão ser armazenadas em um repositório GitHub público, no mesmo dia em que as questões forem colocadas. Utilize arquivos diferentes para as respostas, separando-as por data. As respostas às questões poderão ser usadas pelo aluno durante a prova, especialmente funções em C para exercícios práticos. Sendo assim, organize bem o seu repositório.
Será utilizada a placa Raspberry Pi em toda a disciplina. Caberá ao aluno decidir qual modelo de Raspberry Pi utilizar, de acordo com suas necessidades no projeto final.
- Dois testes (40% da nota final);
- Projeto de fim de curso (30% da nota final);
- Pontos de controle (20% da nota final).
- Respostas dos ciclos Pomodoro em sala de aula (10% da nota final).
Os alunos formarão duplas para montar um projeto final de maior dificuldade, cobrindo os tópicos vistos em sala de aula. Os projetos serão propostos pelos alunos, e será apresentado um protótipo em funcionamento e o relatório do mesmo, na forma de relatório científico com formatação IEEE, contendo os seguintes tópicos:
- Resumo (1 ponto): Apresentar o projeto de forma geral e em poucas palavras.
- Introdução (1 ponto): Descrição do problema a ser resolvido e revisão bibliográfica do assunto.
- Desenvolvimento (5 pontos): Solução, com justificativa baseada em fundamentos teóricos. O desenvolvimento deverá conter a descrição do hardware e do software: 1. Descrição do hardware (2 pontos) , incluindo a BOM (bill of materials) e a montagem (diagrama de blocos, esquemático, descrição textual etc.). 2. Descrição do software (3 pontos) , apresentando e justificando o algoritmo desenvolvido. Esta seção do relatório NÃO CONSISTE em simplesmente replicar o código, e sim em explicar como ele funciona, com base em fluxogramas, pseudo-códigos etc. O código deverá ser apresentado como um apêndice do relatório.
- Resultados (2 pontos): Explicar os experimentos definidos para validar o projeto proposto, seguido de análise crítica dos resultados esperados e obtidos. Em caso de divergências, apontar as possíveis causas.
- Conclusão (1 ponto): Retomar sucintamente os principais pontos do relatório: descrição do problema, solução utilizada e resultados obtidos.
Os pontos de controle serão prévias do projeto final. Cada dia de atraso na apresentação dos pontos de controle acarreta na perda de 0,5 pontos da nota do mesmo. Serão esperados os seguintes resultados para cada ponto de controle:
- PC1: proposta do projeto (justificativa, objetivos, requisitos, benefícios, revisão bibliográfica).
- PC2: protótipo funcional do projeto, utilizando as ferramentas mais básicas da placa de desenvolvimento, bibliotecas prontas etc.
- PC3: refinamento do protótipo, acrescentando recursos básicos de sistema (múltiplos processos e threads, pipes, sinais, semáforos, MUTEX etc.).
- PC4: refinamento do protótipo, acrescentando recursos de Linux em tempo real.
Todos os relatórios dos pontos de controle serão entregues através do mesmo repositório GitHub das respostas às perguntas em sala de aula. Crie uma pasta separada no repositório para a entrega dos pontos de controle. DEVERÁ HAVER SOMENTE UM ARQUIVO POR RELATÓRIO, EM FORMATO PDF. Em caso de cópias (integrais ou parciais), ambos os relatórios ficarão com nota ZERO. Os diferentes templates com formatação IEEE estão disponíveis em:
- Word: http://goo.gl/ghgLsR
- Unix LaTeX: http://goo.gl/p3ExfQ
- Windows LaTeX: http://goo.gl/gAxi96
- Introdução aos sistemas embarcados
- Introdução ao OS Linux
- Obtendo informações do sistema
- Principais comandos
- Estrutura de diretórios
- Instalação padrão de programas
- Desenvolvimento para sistemas embarcados
- Conceito de cross-platform
- Componentes e suas funções (host, target, interface de comunicação, etc)
- Processo de geração de imagens
- Utilização de makefiles
- Inicialização em Sistemas Embarcados
- Ferramentas do target
- Transferência de imagens
- Ferramentas para o Target System
- Transferência de imagens
- Cenários de boot do target
- Seqüência de inicialização do target
- Subsistema de I/Os.
- Conceito básico de I/Os
- O subsistema de I/Os
- Modo de transferência serial e em blocos
- Funções de um subsistema de I/O
- Recursos do sistema I
- Processos, sinais e threads
- Comunicação e sincronismo entre processos
- Programação para redes (sockets)
- Introdução ao RTOS
- Características dos sistemas RT
- Conceitos de Hard Real-Time e Soft Real-Time
- Conceito de latência e Jitter
- Introdução ao framework Xenomai
- Recursos de sistema II
- Tarefas
- Alarmes
- Mutex
- Semáforos
- Variáveis condicionais
- Fila de mensagens
- Introdução ao LKM
- Introdução
- Módulos do kernel
- Desenvolvimento de um módulo
- Comandos do modutils
- Introdução aos device drivers
- Conceitos básicos sobre device driver
- Estrutura de um device driver
- Funções de um device driver
- Instalação e carregamento de um device driver
Básica:
- Mitchell, M., Oldham, J. & Samuel, A., Advanced Linux Programming, Editora: Newriders, 2001.
- Li, Q. & Yao, C., Real-Time Concepts for Embedded Systems, Editora: CMP Books, 2003.
Complementar:
- Kopetz, H., Real-Time Systems - Design Principles for Distributed Embedded Applications, 2o Edição. Editora Springer.
- Bovet, D. P. & Marco Cesati, M., Understanding the Linux Kernel, 3o Edição, Editora: O'Reilly, 2005.
- Corbet, J., Rubini, A. & Kroah-Hartman, G., Linux device drivers, 3o Edição, Editora: O'Reilly, 2005.
- Karim Yaghmour, Building Embedded Linux Systems, Publisher: O'Reilly, 2003.
- David Kalinsky, Introduction to Real-Time Operating Systems, White paper Xenomai API, www.xenomai.org.