EEL 510232 – Programação de Sistemas Embarcados


Semestre 2015/1
Curso: Programa de Pós-Graduação em Engenharia Elétrica
Código da disciplina: EEL 510232
Número de créditos: 3
Professor: Eduardo Augusto Bezerra


Horário das aulas

  • Qui 14:20 – 17:20

Ementa

Conceitos introdutórios; Sistema operacional; Orientação a objetos; Classes; Estruturas de dados; Encapsulamento; Herança; Polimorfismo; Tratamento de exceções; Templates; Entrada e saída; System-on-a-chip; Teste e verificação.


Objetivos

O cumprimento da disciplina busca dar ao aluno, ao final do semestre, condições de:

  • Dar continuidade aos estudos de programação de sistemas computacionais embarcados.
  • Compreender os conceitos fundamentais do paradigma de programação orientada a objetos.
  • Desenvolver a capacidade de análise de programas em C++ de complexidade média.
  • Entender o funcionamento básico de sistemas operacionais para acesso a periféricos.
  • Desenvolver programas em C++ para sistemas embarcados baseados em microprocessadores embarcados, e também sistemas do tipo System-on-a-chip (SoC).

Metodologia

  • O conteúdo programático será desenvolvido por meio de aulas expositivas com auxílio de recursos multimídia.
  • Aulas teóricas e práticas, expositivas, com slides
  • Exercícios a serem resolvidos em aula e extra-classe pelos alunos
  • Práticas, em laboratório, onde os alunos seguirão tutoriais fornecidos pelo professor com instruções para utilização de ferramentas e placas de desenvolvimento
  • O material das aulas é disponibilizado na página da disciplina
  • A plataforma Moodle é a ferramenta oficial da universidade e da disciplina para comunicação com os alunos e para entrega de trabalhos.

Avaliação

  • A média geral do trimestre (MT) é obtida a partir da média aritmética MT = (S + T) / 2, onde S é a nota da preparação/apresentação de seminários, e T é a nota do trabalho final

Bibliografia

  • Walter J. Savitch, “C++ absoluto”, Addison Wesley, 2004 ISBN 85-88639-09-2. Disponível na biblioteca da UFSC em “Livros Eletrônicos”. Título original: Absolute C++.
  • Walter J. Savitch, “Absolute C++”, Addison Wesley, 2004 ISBN 85-88639-09-2.
  • Dominic Herity, “Modern C++ in embedded systems – Part 1: Myth and Reality
  • W. Wolf, Computer as Components – Principles of embedded computing system design, Morgan Kaufmann Publishers, 2000.
  • L. Lavagno, UML for real design of embedded real-time systems, Kluwer Academic, 2003.
  • Christopher Hallinan, Embedded Linux Primer, Prentice Hall, 2007.H. M. Deitel e P. J. Deitel, “C++ How to Program”, Pearson Prentice Hall, 2006.
  • Victorine V. Mizrahi, Treinamento em Linguagem C++: módulo 1, Makron Books, 2007.
  • Victorine V. Mizrahi, Treinamento em Linguagem C++: módulo 2, Makron Books, 2007.
  • Herb Sutter, “Exceptional C++ Style”, Pearson Makron Books, 2006.
  • Richard C. Lee; William M. Tepfenhart, “C++ – A Practical Guide to Object-Oriented Development”, Makron Books.
  • B. Stroustrup, The C++ Programming Language. Reading: Addison-Wesley, 1997.

Trabalho prático


Organização das aulas

Aula Conteúdo
[26/mar]
2 [02/abr]
3 [09/abr]
4 [16/abr]
  • Resolução do exercício 6 da lista [13].
  • Primeira parte da aula – resolução no quadro do exercício, utilizando apenas uma classe “Aluno”. Todas as manipulações do vetor de alunos foi realizada no main, sem a chamada de funções.
  • Segunda parte da aula – Foi solicitado aos alunos a realização de alterações no programa, visando a utilização de uma classe “VetorAlunos” para modelar os dois vetores (Alunos e Valido), e também para realizar todas as operações sobre esses vetores.
  • Solução do João Sehn para a segunda parte da aula (com duas classes): Ver pasta “Agregacao”
5 [23/abr]
  • Hierarquia de classesHerançaExemploHerança múltipla; Construtores e destrutores; Notas de aula [1].
  • Relacionamento entre classesAgregação; Exercícios.
  • Exercício: Implementação, no Linux, de calendário com data e hora, usando como base os exemplos de herança múltipla discutidos na aula. O programa deverá ficar em laço infinito, atualizando a data e hora.
6 [30/abr]
  • ExercícioHerança + I/O Linux – Sistema de controle de acesso, com cadastro de usuarios em um vetor, e diversos tipos de leitores (codigo de barras, RFID, …).
7 [07/mai]
  • Exercício: projeto e desenvolvimento de software para controle de uma máquina de venda de refrigerantes (vending machine). Será exercitado o ciclo completo de projeto, incluindo o levantamento de requisitos, descrição do projeto com máquina de estados finita (FSM), codificação, implementação e testes. [Sugestão de solução]
  • Tutorial Leon3 na plataforma Atlys – apresentação do fluxo de desenvolvimento utilizando um cross-compiler, e ferramenta de download.
  • Protipação da vending machine na Atlys com Leon3 – solução para a implementação da vending machine, considerando os recursos reduzidos de um kit de desenvolvimento baseado em um microprocessador, sem sistema operacional (bare-metal). Dicas para acesso aos recursos de I/O (chaves/botões) estão disponíveis em: grlib_README
8 [14/mai]
  • Estruturas de dados em C++: Vetor, Matriz, Listas, Filas, Pilhas, Grafo, Arvore. Exemplo de lista encadeada: [ListaInteiros].
  • Demonstração durante a aula de detalhes das operações da lista: inclusão, remoção, consulta, listagem, construtor, destrutor.
  • Exercício: Implementar uma lista para armazenamento de valores inteiros ordenada, ou seja, uma lista que a cada inclusão deverá permanecer com os valores armazenados nos nodos em ordem crescente. A lista não pode aceitar valores duplicados.
9 [21/mai]
  • Exercício: Implementar no Linux uma lista de frequencia eletrônica (cadastro de alunos, dados do professor), utilizando uma lista encadeada, conforme discutido na aula de estruturas de dados (aula anterior).
  • Exercício: Implementar uma lista duplamente encadeada, com as mesmas funcionalidades apresentadas na lista simplesmente encadeada, utilizando as facilidades dos nodos com ponteiros para o proximo nodo e para o nodo anterior e, também, utilizando um ponteiro fixo no ultimo nodo da lista.
  • Exercício: Prototipação do “calendário com data/hora” (herança múltipla) na Atlys. A apresentação da data/hora pode ser realizada na tela do computador, com o cout.
  • Exercício: Implementar na Atlys a lista de frequencia eletrônica (utilizando uma lista encadeada, conforme discutido na aula de estruturas de dados).
10 [28/mai]
  • Exercício sobre polimorfismo: implementar as classes necessárias para que o programa testCShape3d.cpp funcione corretamente.
  • Exercício friends/sobrecarga operadores: Implementação do “calendário com data/hora” (herança múltipla) na Atlys, utilizando o conceito de sobrecarga de operadores e friends [ver exercício 2].
11 [11/jun]
  • Funções Template e Classes TemplateNotas de aula e exemplos. Uso de templates nas estruturas de dados (ex. nodo em lista encadeda).
  • Exercício: Adaptar o programa da CShape3d para utilização de templates, possibilitando o cálculo de volumes com float e inteiro.
12 [18/jun]
  • Plataforma Atlys: Testes utilizando o OLED – visando o desenvolvimento do projeto final.
13 [25/jun]
14 [*02/jul]

Artigos da disciplina:

  1. Selecting a programming language for your project
  2. Towards Unified Design of Hardware and Software Components Using C++
  3. Re-engineering C++ Component Models Via Automatic Program Transformation
  4. The role of SW architecture in solving fundamental problems in object-oriented development of large embedded SW systems
  5. Issues with object orientation in verifying safety-critical systems
  6. Design of a Middleware Interface for ARINC 429 Data Bus
  7. R3TOS: A Novel Reliable Reconfigurable Real-Time Operating System for Highly Adaptive, Efficient, and Dependable Computing on FPGAs
  8. Constraint-Based Object-Oriented Programming
  9. A Smooth Concurrency Revolution with Free Objects
  10. Protecting Programs Against Memory Violation In Hardware
  11. Toward Unified Design of Hardware and Software Components Using
  12. An Embedded Systems Laboratory to Support Rapid Prototyping of Robotics and the Internet of Things
  13. Can GPGPU Programming Be Liberated from the Data-Parallel Bottleneck?
  14. Software Development for Infrastructure
  15. A Heterogeneous Simulation and Modeling Framework for Automation Systems
  16. Applying test driven development to embedded software
  17. OpenCL Overview, Implementation, and Performance Comparison

Material de apoio