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


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


Horário das aulas

  • Sex 13:30-17:10 [13:30-14:20; 14:20-15:10; 15:10-16:00; 16:20-17:10]

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.
  • Nas aulas práticas são utilizadas as placas Atlys disponíveis no laboratório configuradas com o processador LEON3. Os alunos que tiverem interesse, poderão adquirir um kit de desenvolvimento com um ARM Cortex M4F.
  • 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 semestre (MS) é obtida a partir da média geométrica MS = sqrt(P x T), onde P é a nota da prova, e T é a nota do trabalho final.
  • No caso de aluno cursando a disciplina da graduação (EEL7323), será aprovado aquele que satisfizer os seguintes critérios:

    • Obtiver assiduidade superior ou igual a 75%.
    • Obtiver média final (MS) superior ou igual a 6,0.
  • No caso de aluno cursando a disciplina do PPGEEL (EEL510265), será aprovado aquele que satisfizer os seguintes critérios:

    • Obtiver assiduidade superior ou igual a 75%.
    • Obtiver média final (MS) superior ou igual a 7,0.

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

Conteúdo das aulas
  • Exercício para fixação do conteúdo a ser desenvolvido pela turma durante a aula: Cadastro de alunos (Exercício 6 da lista [13]).
  • Correção do exercício em aula (Ver na pasta “Agregacao” uma possível solução para o exercício).
  • Exercício para fixação do conteúdo a ser desenvolvido pela turma durante a aula: 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.
  • System-on-a-Chip (SoC): Plataforma Atlys, Leon3 + FPGA
  • Exercício: Protipação do clock/calendar descrito nas Notas de aula [1] 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
  • Outra placa que pode ser utilizada (adquirida pelos alunos que desejarem): ARM Cortex M4F
  • 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].
  • Exercício sobre polimorfismo: implementar as classes necessárias para que o programa testCShape3d funcione corretamente.
  • Prova (28/09)
  • Exercício: Adaptar o programa da CShape3d para utilização de templates, possibilitando o cálculo de volumes com float e inteiro.
  • 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 no início do semestre [13] (cadastro de aluno e notas), visando utilizar uma lista duplamente encadeada como estrutura de dados, no lugar do vetor utilizado originalmente. Os nodos da lista, além dos dados do aluno (matrícula e notas), deverá conter também a data e hora atual (usar o clock/calendar desenvolvido anteriormente). O valor da data/hora pode ser salva como uma string. Após testar o programa em um computador, transferir para o kit de desenvolvimento e realizar os devidos testes de funcionamento.
  • Questionário respondido por engenheiros e gerentes da área tecnológica: “Greatest technology challenges”
  • 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?
  • Webinar: “Migrating from Embedded C to C++“. Tópicos cobertos:
    • Encapsulation by classes and namespaces
    • Automatic initialization with class constructors
    • Function overloading
    • Improved reuse with class inheritance and virtual functions
    • Safe flexibility with class templates
    • Stronger checking by compiler
    • Standard library of containers and algorithms
    • Integration with existing C code
  • System-on-a-Chip (SoC): Plataforma DE1-SoC Cyclone V da Altera, ARM (dual core Cortex A9) + FPGA
  • Aulas reservadas para o desenvolvimento do projeto final (atividade extra-classe).

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