EEL510265 – Programação de Sistemas Embarcados
EEL7323 – Programação C++ para Sistemas Embarcados


Semestre 2017/1
Curso: Programa de Pós-Graduação em Engenharia Elétrica
Curso: Engenharia Eletrônica
Número de créditos: 4
Professor: Eduardo Augusto Bezerra


Horário das aulas

  • Ter 17:10-20:30 - 17:10-18:00; 18:00-18:50; 18:50-19:40; 19:40-20:30

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

  • B. Stroustrup, The C++ Programming Language. Reading: Addison-Wesley, 1997.
  • 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.

Trabalho prático


Organização das aulas

Aula Conteúdo
1[15/03]
2[21/03]
  • Resolução do exercício 6 da lista [13]. Ver na pasta “Agregacao” uma possível solução para o exercício.
  • Exercício: Implementação 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.
3[28/03]
  • Exercício sobre polimorfismo: implementar as classes necessárias para que o programa testCShape3d funcione corretamente.
  • Exercício: Adaptar o programa da CShape3d para utilização de templates, possibilitando o cálculo de volumes com float e inteiro.
4[04/04]
  • Estruturas de dados em C++: Vetor, Matriz, Listas, Filas, Pilhas, Grafo, Arvore.
  • Demonstração durante a aula de detalhes de operações em estruturas de dados: inclusão, remoção, consulta, listagem, construtor, destrutor.
  • Uso de templates nas estruturas de dados (ex. nodo em lista encadeada)
  • 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.
  • 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 próximo nodo e para o nodo anterior e, também, utilizando um ponteiro fixo no último nodo da lista.
  • Exercício: Alterar o exercício 6 desenvolvido nas aulas 1 e 2 [13], visando utilizar uma lista duplamente encadeada como estrutura de dados, no lugar do vetor utilizado originalmente.
5[11/04]
  • System-on-a-Chip (SoC): Plataforma DE1-SoC Cyclone V da Altera, ARM (dual core Cortex A9) + FPGA
  • System-on-a-Chip (SoC): Plataforma Atlys, Leon3 + FPGA
  • Exercício: Protipação do clock/calendar da aula 5 na plataforma Atlys com Leon3 – solução para a implementação do clock/calendar, 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
  • 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].
6[18/04]
  • 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].
7[25/04]
  • Palestra do Bjarne Stroustrup, criador do C++: “Writing good C++14“. Essa palestra e’ relacionada a uma das frases famosas do Stroustrup: “C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off“. O link fornecido inicia no final do slide 21, onde e’ apresentado um problema discutido nas aulas da disciplina. Que problema e’ esse? Quais as implicações desse problema? Quais as solucoes apresentadas na palestra?
8[02/05]
9[09/05]
10[16/05]
11[23/05]
12[30/05]
13[06/06]
14[13/06]
15[20/06]
16[27/06]
17[04/07]

Artigos:

  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