EEL510265 – Programação de Sistemas Embarcados
EEL7323 – Programação C++ para Sistemas Embarcados
Semestre 2025/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
- Qua 16:20-17:10-18:00 (LATEP)
 - Qua 18:00-18:50-19:40 (LABSDG)
 
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), 32F429 Discovery (processador ARM), e ESP32-C3 (processador RISC-V).
 - 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 ESP32-C3 ou 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.
 
Projeto final
- Especificação do Projeto Final
 - 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 | 
| 
 Semana 1 – 13/08 
 
 
 
 
 
  | 
| 
 Semana 2 – 20/08 
 
  | 
| 
 Semana 3 – 27/08 
 
 
 
  | 
| 
 Semana 4 – 03/09 
 
  | 
| 
 Semana 5 – 10/09 
  | 
| 
 Semana 6 – 17/09 
 
 
 
 
 
 
  | 
| 
 Semana 7 – 24/09 
 
  | 
| 
 Semana 8 – 01/10 
 
 
 
 
 
 
  | 
| 
 Semana 9 – 08/10 AVALIAÇÃO
  | 
| 
 Semana 10 – 15/10 
 
 
  | 
| 
 Semana 11 – 22/10 
 
 
 
  | 
| 
 Semana 12 – 29/10 Especificação do projeto final
  | 
| 
 Semana 13 – 05/11 
  | 
| 
 Semana 14 – 12/11 
  | 
| 
 Semana 15 – 19/11 
  | 
| 
 Semana 16 – 26/11 Apresentação do projeto final | 
| 
 Semana 17 – 03/12 Entrega do projeto final – Apenas no Moodle | 
| 
 Semana 18 – 10/12 
 Tópicos diversos: 
 
 
 
 
 
  | 
Artigos:
- Selecting a programming language for your project
 - Towards Unified Design of Hardware and Software Components Using C++
 - Re-engineering C++ Component Models Via Automatic Program Transformation
 - The role of SW architecture in solving fundamental problems in object-oriented development of large embedded SW systems
 - Issues with object orientation in verifying safety-critical systems
 - Design of a Middleware Interface for ARINC 429 Data Bus
 - R3TOS: A Novel Reliable Reconfigurable Real-Time Operating System for Highly Adaptive, Efficient, and Dependable Computing on FPGAs
 - Constraint-Based Object-Oriented Programming
 - A Smooth Concurrency Revolution with Free Objects
 - Protecting Programs Against Memory Violation In Hardware
 - Toward Unified Design of Hardware and Software Components Using
 - An Embedded Systems Laboratory to Support Rapid Prototyping of Robotics and the Internet of Things
 - Can GPGPU Programming Be Liberated from the Data-Parallel Bottleneck?
 - Software Development for Infrastructure
 - A Heterogeneous Simulation and Modeling Framework for Automation Systems
 - Applying test driven development to embedded software
 - OpenCL Overview, Implementation, and Performance Comparison
 
Material de apoio
- [1] Notas de aula C++ Prof. Eduardo Bezerra – herança, herança múltipla, classes virtuais, funções virtuais, funções friend, classes abstratas, sobrecarga de funções, sobrecarga de operadores, polimorfismo, template, GUI.
 - [2] Notas de aula “Classes” Prof. Eduardo Bezerra – Classes e objetos em C++
 - [3] “Ponteiros” Prof. Eduardo Bezerra – “Ponteiros” e exemplos
 - [4] “Strings” – material sobre strings em C++
 - [5] “Strings – getline” – Dica para ler strings com espacos em C++
 - [6] Tutorial introdução Linux/C++ “Hello World!” - Primeira aula prática!
 - [7] Estrutura de um programa
 - [8] Variáveis e definições
 - [9] Operadores
 - [10] Controle do fluxo da execução de um programa
 - [11] Funções
 - [12] Structs e Classes
 - [13] Exercícios – possível solução para o exercício 5
 - [14] Objetos
 - [15] Classes
 - [16] Abstração
 - [17] Encapsulamento
 - [18] Classes e construtores
 - [19] Exercícios sobre classes e objetos
 - [20] Exemplos de uso de threads em C e C++
 - [21] Material sobre linux – Comandos mais usados em uma página; Comandos básicos; Resumo dos comandos básicos; Exercícios
 - [Arquivos] – material sobre arquivos em C++
 - [Bibliotecas padrão] – Resumo das bibliotecas padrão do C++
 - [Pilha] – uma classe “Pilha” para armazenar dados genéricos
 - [Fila] – uma classe “Fila” para armazenar dados genéricos
 - [Lista] – uma classe “Lista” para armazenar dados genéricos
 - [Lista encadeada] – exemplo de lista encadeada genérica, armazenando alunos, professores, …
 - [Árvores] – Nodo para construção de árvores binárias (de inteiros): Nodo_arvoreb.h e Nodo_arvoreb.cpp. Classe para criação e manipulação de Árvore Binária de Pesquisa utilizando Nodo_arvoreb.h: ABP.h, ABP.cpp e testeABP.cpp.
 - [Standard Template Library – STL] – Tutorial STL – Exemplo de vector, com métodos disponíveis, e comparação com list
 - Aplicações exemplo:
- Classe SystemUser (ler antes o arquivo README.txt)
 - Classe Racional (solução)
 - Herança bastante simples: (Pessoa.cpp, Aluno.cpp, main.cpp)
 - Herança: (Heranca)
 - Agregação: (Agregacao)
 - Herança: (Sistema Bank Account)
 - Exemplo/exercício de herança: ex_heranca.cpp, mmamals.cpp, e vmammals.cpp