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:

  1. Dar continuidade aos estudos de programação de sistemas computacionais embarcados.
  2. Compreender os conceitos fundamentais do paradigma de programação orientada a objetos.
  3. Desenvolver a capacidade de análise de programas em C++ de complexidade baixa ou média.
  4. Entender o funcionamento básico de sistemas operacionais para acesso a periféricos.
  5. 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:

  1. 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:

  1. 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.
  2. 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. 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”.
  4. 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.
  5. 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.
  6. 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”.
  7. 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”.
  8. 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”.
  9. B. Stroustrup, The C++ Programming Language. Reading: Addison-Wesley, 1997.
  10. 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

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

Semana 4

Semana 5

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

Semana 6

  • 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

Semana 7

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

Semana 8

Semana 9

AVALIAÇÃO

  • Avaliação: projeto e desenvolvimento de software para A SER DEFINIDO. Será
    exercitado o ciclo completo de projeto, incluindo o levantamento de requisitos,
    descrição do projeto, codificação, implementação e testes.
  • Especificação do projeto final.

Semana 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.
  • Projeto e desenvolvimento de software para A SER DEFINIDO. Será exercitado o
    ciclo completo de projeto, incluindo o levantamento de requisitos, descrição do
    projeto, codificação, implementação e testes.

Semana 11

  • Estruturas de dados em C++: Vetor, Matriz, Listas, Filas, Pilhas, Grafo, Arvore.
  • Uso de templates nas estruturas de dados (ex. nodo em lista encadeada)

Semana 12

Feriado – Sem aula

Semana 13

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

Semana 14

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

Semana 15

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

Semana 16

  • Entrega da documentação do projeto final.

Semana 17

  • Apresentação do projeto final.

Semana 18

Reservado.


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