Programação C++ para Sistemas Embarcados
Semestre 2012/2
Cursos: Engenharia Elétrica, Engenharia Eletrônica, Engenharia de Controle e Automação, Engenharia de Produção Elétrica
Turmas: 08202
Código da disciplina: EEL7832
Carga horária: 72 horas-aula
Número de créditos: 4
Professores: Eduardo Augusto Bezerra e Djones Vinícius Lettnin
Horário das aulas
- Qua 17:30
Ementa
Conceitos Introdutórios, Paradigma de orientação a objetos, Classes, Estruturas de Dados, Encapsulamento, Herança, Polimorfismo, Tratamento de exceções, Templates, Entrada e Saída, Alocação de memória, Programação de Sistemas Embarcados.
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.
- 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.
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 preparados a partir dos livros texto da disciplina
- 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
- 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.
- Atendimento aos alunos em horário extra-classe visando esclarecer dúvidas pontuais e individuais
- Auxílio de monitor para esclarecer dúvidas
Avaliação
- Serão desenvolvidos trabalhos durante o semestre, que serão utilizados como base para a implementação do trabalho final.
- A nota final (NF) do semestre será a nota obtida na avaliação do trabalho final da disciplina.
- Condição para a aprovação:
- Freqüência > 75% e NF >= 6,0
Bibliografia
- Livro texto:
- 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++.
- Bibliografia 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”.
- 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.
- 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.
- L. Lavagno, UML for real design of embedded real-time systems, Kluwer Academic, 2003.
- Christopher Hallinan, Embedded Linux Primer, Prentice Hall, 2007.
Equipe de apoio
- Roberto de Matos – email: roberto AT eel ufsc br
- Frederico Ferlini – email: fferlini AT gmail com
- Paulo Villa – email: prcvilla AT gmail com
Horário de atendimento aos alunos
- Ter 14:00-16:00 (enviar email para reserva de horário)
Trabalho prático
- Especificação do Trabalho Final: “Sistema de Gerência de Controle de Acesso“
- Data da entrega e apresentações: 20/02/2013 – link para reserva de horário para apresentação (selecionar week view)
Organização das aulas
Aula | Data | Conteúdo |
1 | 19/09 | Apresentação da disciplina, revisão de C, introdução a C++. Material: Estrutura programa [7]; Variáveis [8]; Operadores [9]; Controle de fluxo [10]; Funções [11]; Class x struct [12]; Exercícios [13] |
2 | 03/10 | Paradigma de orientação a objetos. Material: Objetos [14]; Classes [15]; Abstração [16]; Encapsulamento [17]; Métodos, atributos, construtores [18]; Classe Resistor; Exercícios [19]; Projeto Final |
3 | 10/10 | Ambiente de desenvolvimento [20]: Tutorial [6]; One page Linux; Comandos básicos; Exercícios Linux. Ponteiros [3]: Notas de aula; Exemplos; Exercícios; Soluções. |
4 | 17/10 | Hierarquia de classes: Herança; Exemplo; Herança múltipla; Construtores e destrutores; Notas de aula [1]; I/O Serial/Paralela. Exercício: Herança + I/O Linux |
5 | 24/10 | Relacionamento entre classes: Agregação; Exercícios. Programação em C++ de microcontrolador de 16 bits: Site da Renesas; e Tutorial. |
6 | 31/10 | C++ com IAR para Renesas: Tutorial para uso de C++ com a ferramenta IAR no kit QSK26A da Renesas. |
7 | 07/11 | Classes bases virtuais; Funções virtuais; Friends; Sobrecarga de operadores: Notas de aula [1]; Exemplo friends; Exercícios. |
8 | 14/11 | Exercícios: Implementação de calendário no microcontrolador M16C/26A da Renesas [ver exercício 2]; Comunicação serial no Linux [ver exercício 3]. |
9 | 21/11 | Classes abstratas; Polimorfismo: Notas de aula [1]. Tratamento de exceções: exemplos e std::exception. Manipulação de arquivos: exemplos. Sistema básico de E/S: exemplos. Exercício sobre polimorfismo: implementar as classes necessárias para que o programa testCShape3d.cpp funcione corretamente. |
10 | 28/11 | Funções Template e Classes Template: Notas de aula e exemplos. C++ Standard Template Library – STL: tutorial e exemplos. Exercício: Adaptar o programa da última aula para utilização de templates, possibilitando o cálculo de volumes com float e inteiro. Projeto do trabalho final. |
11 | 05/12 | SystemC |
12 | 12/12 | SystemC |
13 | 19/12 | SystemC |
14 | 20/02 | Apresentação do trabalho final. |
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] 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