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


Semestre 2022/2
Curso: Engenharia Eletrônica
Curso: Programa de Pós-Graduação em Engenharia Elétrica
Número de créditos: 4
Professores: Eduardo Augusto Bezerra e Anderson Wedderhoff Spengler
Pré-requisito para EEL7323: EEL7030 – Microprocessadores


Horário das aulas

  • Seg 7:30-9:10 (LABSDM)
  • Qui 16:20-18:00 (LATEP)

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.
  • Exercícios a serem resolvidos em aula e extra-classe pelos alunos.
  • Tutoriais fornecidos pelo professor com instruções para utilização de ferramentas e placas de desenvolvimento.
  • Utilização de plataformas de desenvolvimento Atlys (soft-processor LEON3), e 32F429 Discovery (processador ARM).
  • Os alunos que tiverem interesse em praticar os tópicos da disciplina por conta própria, poderão adquirir outras plataformas de desenvolvimento de baixo custo como, por exemplo, o ARM Cortex M4F LaunchPad.
  • 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 aritmética MS = (A + T) / 2, onde A é a nota da avaliação a ser realizada na metade do semestre, 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. [slides do livro]
  • 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, 1st ed. 2002. New York, NY: Springer, 219 p.
  • Grotker, Thorsten; LIAO, Stan; Martin, Grant; Swan, Stuart, “System Design with SystemC”, Makron Books.Disponível em: https://doi.org/10.1007/b116588
  • Edwards, Stephen A. “Languages for Digital Embedded Systems”. 1st ed. 2000. New York, NY: Springer US, 306 p. Disponível em: https://doi.org/10.1007/978-1-4615-4325-1.
  • Sally, Gene. “Pro Linux Embedded Systems”. 1st ed. 2010. Berkeley, CA, 550 p. Disponível em: https://doi.org/10.1007/978-1-4302-7226-7.

Trabalho prático

  • Especificação do Trabalho Final: “A ser definido”
  • Template com exemplo de conteúdo esperado no relatório técnico: https://www.overleaf.com/read/knvsthpmfvcf
  • Data da entrega e apresentações: As datas das entregas estão listadas no final da especificação do projeto

Organização das aulas (por semana)

Conteúdo das aulas
1

Semana 1 – 29/08 e 31/08

2

Semana 2 – 05/09

3

Semana 3 – 12/09 e 14/09

  • 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).
4

Semana 4 – 19/09 e 21/09

  • 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.
5

Semana 5 – 26/09 e 28/09

  • Classes abstratas; Polimorfismo: Notas de aula [1].
    • Exercício sobre polimorfismo: implementar as classes necessárias para que o programa testCShape3d funcione corretamente.
    • Exemplo de classe abstrata: [RobotLinux]
6

Semana 6 – 03/10 e 05/10

  • Exercício: Adaptar o programa da CShape3d para utilização de templates, possibilitando o cálculo de volumes com float e inteiro.
7

Semana 7 – 10/10

  • Plataforma Atlys, Leon3 + FPGA (System-on-a-Chip – SoC)
  • 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
8

Semana 8 – 17/10 e 19/10

  • 19/10 – Avaliação.
9

Semana 9 – 24/10 e 26/10

  • Desenvolvimento da Questão 2 da P1 – Controlador da máquina de vendas de refrigerantes no processador LEON3.
  • 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)
10

Semana 10 – 31/10

  • 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)
11

Semana 11 – 07/11 e 09/11

  • Especificação do projeto final: TBD.
  • Dicas para o desenvolvimento do Projeto Final.
12

Semana 12 – 14/11 e 16/11

13

Semana 13 – 21/11 e 23/11

  • Aulas reservadas para o desenvolvimento e entregas parciais do projeto final.
  • Exercício: projeto e desenvolvimento de sistema de apoio ao controle de aquecimento de piscinas (PARTE 1). Será exercitado o ciclo completo de projeto, incluindo o levantamento de requisitos, descrição do projeto, codificação, implementação e testes.
  • Exercício: projeto e desenvolvimento de sistema de apoio ao controle de aquecimento de piscinas (PARTE 2). Inclusão de funcionalidade de registro de eventos (log) utilizando estruturas de dados, e comunicação serial via UART para transmissão do log para um computador hospedeiro. Será exercitado o ciclo completo de projeto, incluindo o levantamento de requisitos, descrição do projeto, codificação, implementação e testes.
14

Semana 14 – 28/11 e 30/11

  • Aulas reservadas para o desenvolvimento e entregas parciais do projeto final.
  • 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.
  • Exercício: Alterar o software de controle da máquina de venda de refrigerantes de forma a incluir um log das operações realizadas. Utilizar uma estrutura de fila para armazenar as informações sobre as vendas realizadas. Sempre que uma nova venda for realizada, deverá ser incluído um novo nodo na fila contendo: nome do refrigerante vendido; valor do refrigerante; e data/hora da venda (usar o clock/calendar desenvolvido anteriormente). A qualquer instante, o operador da máquina poderá realizar as seguintes consultas no log: listar o valor total de vendas; listar a quantidade vendida de cada refrigerante; e listar o período do dia com mais vendas. Lembrar que para realizar essas operações, a fila precisará ser esvaziada (log será reinicializado), e os dados transferidos para outra estrutura de dados (uma lista, por exemplo).
15

Semana 15 – 05/12 e 07/12

  • Aulas reservadas para o desenvolvimento e entregas parciais do projeto final.

Tópicos diversos:

  • 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 e entregas parciais do projeto final.
16

Semana 16 – 12/12 e 14/12

  • Aulas reservadas para o desenvolvimento e entregas parciais do projeto final.
17

Semana 17 – 19/12 e 21/12

  • Apresentação do projeto final.

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