EEL510265 – Programação de Sistemas Embarcados
EEL7323 – Programação C++ para Sistemas Embarcados
Semestre 2026/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: EEL7035 – Microprocessadores e Microcontroladores
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 baixa ou 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 e microcontroladores, e também sistemas do tipo System-on-a-chip (SoC).
Metodologia
Slides, textos, exemplos de programas, e demais recursos de ensino são disponibilizados na página do professor em http://gse.ufsc.br/bezerra.
Durante as aulas, são apresentados os conceitos listados no item “VII. Conteúdo Programático” do Plano de Ensino, e são realizados exercícios práticos de projeto e implementação.
Contando com o auxílio do professor, os alunos resolvem os problemas apresentados nas aulas. Fora dos horários das aulas, os alunos podem utilizar seus próprios computadores para resolução de atividades extraclasse, uma vez que na disciplina são utilizadas ferramentas de desenvolvimento gratuitas, tais como as 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.
Os alunos podem esclarecer dúvidas com o professor e com os colegas, presencialmente e/ou por intermédio dos sistemas de discussão disponíveis no Moodle da disciplina, ou no Discord.
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 final do semestre (MF) é obtida a partir da média aritmética MF = (A + T) / 2, onde A é a nota da avaliação a ser realizada na metade do semestre, e T é a nota do trabalho final.
- As avaliações serão expressas por notas graduadas de 0 (zero) a 10 (dez), não podendo ser fracionadas aquém ou além de 0,5 (zero vírgula cinco). As frações intermediárias relativas às notas das avaliações, média final ou validação de disciplinas serão arredondadas para a graduação mais próxima, sendo as frações de 0,25 (zero vírgula vinte e cinco) e 0,75 (zero vírgula setenta e cinco) arredondadas para a graduação imediatamente superior.
- 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 (MF) 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 (MF) superior ou igual a 7,0.
Bibliografia
BÁSICA:
- 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++.
COMPLEMENTAR:
- H. M. Deitel e P. J. Deitel, C++: como programar, São Paulo: Pearson Prentice Hall, 2006. ISBN 85-7605-056-0 – Disponível na biblioteca da UFSC em “Livros Eletrônicos”. Título original: C++ How to Program.
- Victorine V. Mizrahi, Treinamento em Linguagem C++: módulo 1, Makron Books, 2007. ISBN 9788534602907 – Disponível na biblioteca da UFSC em “Livros Eletrônicos”.
- 3. Victorine V. Mizrahi, Treinamento em Linguagem C++: módulo 2, Makron Books, 2007. ISBN
9788534603034 – Disponível na biblioteca da UFSC em “Livros Eletrônicos”. - Herb Sutter, Programação avançada em C++, Pearson Makron Books, 2006. ISBN 85-346-1545-4 – Disponível na biblioteca da UFSC em “Livros Eletrônicos”. Título original: Exceptional C++ Style.
- Richard C. Lee; William M. Tepfenhart, UML e C++ – Guia Prático de Desenvolvimento Orientado a Objeto, Makron Books, ISBN 85-346-1364-8 – Disponível na biblioteca da UFSC em “Livros Eletrônicos”. Título original: UML and C++ – A Practical Guide to Object-Oriented Development.
- Grotker, Thorsten; LIAO, Stan; Martin, Grant; Swan, Stuart. System Design with SystemC. 1st ed. 2002. New York, NY: Springer US: Imprint: Springer, 2002. xvi, 219 p ISBN 9780306476525. Disponível em: https://doi.org/10.1007/b116588 – Disponível na biblioteca da UFSC em “Livros Eletrônicos”.
- Edwards, Stephen A. Languages for Digital Embedded Systems. 1st ed. 2000. New York, NY: Springer US: Imprint: Springer, 2000. xviii, 306 p (The Springer International Series in Engineering and Computer Science, 0893-3405; 572). ISBN 9781461543251. Disponível em: https://doi.org/10.1007/978-1-4615-4325-1 – Disponível na biblioteca da UFSC em “Livros Eletrônicos”.
- Sally, Gene. Pro Linux Embedded Systems. 1st ed. 2010. Berkeley, CA: Apress: Imprint: Apress, 2010. xx, 550 p ISBN 9781430272267. Disponível em: https://doi.org/10.1007/978-1-4302-7226-7 – Disponível na biblioteca da UFSC em “Livros Eletrônicos”.
- B. Stroustrup, The C++ Programming Language. Reading: Addison-Wesley, 1997.
- W. Wolf, Computer as Components – Principles of embedded computing system design, Morgan Kaufmann Publishers, 2000.
Projeto final
- Especificação do Projeto Final – TBD
- 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)
|
Semana 1
|
|
Semana 2
|
|
Semana 3
|
|
Semana 4
|
|
Semana 5
|
|
Semana 6
|
|
Semana 7
|
|
Semana 8
|
|
Semana 9 AVALIAÇÃO
|
|
Semana 10
|
|
Semana 11
|
|
Semana 12 Feriado – Sem aula |
|
Semana 13
|
|
Semana 14
|
|
Semana 15
|
|
Semana 16
|
|
Semana 17
|
|
Semana 18 Reservado. |
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