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


Semestre 2015/2
Curso: Programa de Pós-Graduação em Engenharia Elétrica
Curso: Engenharia Eletrônica
Número de créditos: 4
Professor: Eduardo Augusto Bezerra


Horário das aulas

  • Qui 17:10-20:30 - 17:10-18:00; 18:00-18:50; 18:50-19:40; 19:40-20:30

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.
  • Aulas teóricas e práticas, expositivas, com slides
  • 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.

Avaliação

  • A média geral do trimestre (MT) é obtida a partir da média aritmética MT = (S + T) / 2, onde S é a nota da preparação/apresentação de seminários, e T é a nota do trabalho final

Bibliografia

  • 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.
  • 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.
  • B. Stroustrup, The C++ Programming Language. Reading: Addison-Wesley, 1997.

Trabalho prático

  • Especificação do Trabalho Final: “Controle de containers
  • Data da entrega e apresentações: 03/dez/2015.

Organização das aulas

Aula Conteúdo
[13/ago]
2 [20/ago]
  • Primeira parte da aula – discussão sobre: componentes recebidos da TI (MSP430,…); organização da turma; próximas etapas (aquisição dos demais componentes, opções para fabricação e montagem dos PCBs, …).
3 [27/ago]
  • Primeira parte da aula – discussão sobre: diagrama de blocos do circuito a ser projetado; organização da turma; próximas etapas (aquisição dos demais componentes, opções para fabricação e montagem dos PCBs, …).
  • Foi solicitado que a turma implementasse o exercício 6 da lista [13], utilizando uma classe Aluno, e uma Classe Turma com um vetor de Alunos.
4 [03/set]
  • Primeira parte da aula – discussão sobre: divisão das despesas das compras dos componentes (R$100,00 foi o valor total dos componentes para montar 15 placas, logo, R$6,67 por placa); análise de um dos layouts da turma, e decisão de, em uma primeira rodada, fabricar apenas duas placas em uma fresadora da UFSC. Na próxima aula serão apresentados para a turma, os dois layouts a serem utilizados na fabricação das duas primeiras placas.
  • Resolução no quadro do exercício 6 da lista [13]. Ver na pasta “Agregacao” uma possível solução para o exercício.
5 [10/set]
  • Exercício: Implementação, no Linux, 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.
6 [17/set]
  • No inicio da semana (dias 14 ou 15/set), devera’ ser fabricada a PCB na fresadora do lab. do Prof. Fernando Rangel.
  • Dia 17/set, montagem da placa no LABEX, e realizacao de testes preliminares.
7 [24/set]
  • Desenvolvimento e teste de software para a placa MSP430 no LATEP:
    • instalação do Code Composer;
    • Desenvolvimento de software “pisca LED” e teste nos kits launchpad do Rodrigo;
    • Pesquisa na web por uma solução pronta do protocolo I2C, e teste na launchpad;
    • Exercício: implementar versão em C++ do código I2C em C.
  • Próxima aula:
    • Apresentar o software “pisca LED” funcionando;
    • Verificar funcionamento da versão em C++ da implementação em C do protocolo I2C.
8 [01/out]
  • Desenvolvimento e teste de software (protocolo I2C) para a placa MSP430 no LATEP: leitura do RTC [BQ32000] e do sensor de temperatura [tmp75][tmp112].
  • Discussão sobre formas de conexão do Leon3 (plataforma Atlys) com o MSP430 da placa em desenvolvimento pela turma.
  • 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? Seguir esse link do Moodle para fornecer as respostas. Prazo maximo quinta-feira, 01/out, 18:00.
9 [08/out]
  • Estruturas de dados em C++: Vetor, Matriz, Listas, Filas, Pilhas, Grafo, Arvore. Exemplo de lista encadeada: [ListaInteiros].
  • Demonstração durante a aula de detalhes de operações em estruturas de dados: inclusão, remoção, consulta, listagem, construtor, destrutor.
  • 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 proximo nodo e para o nodo anterior e, também, utilizando um ponteiro fixo no ultimo nodo da lista.
  • Exercício: Implementar na Atlys a lista de frequencia eletrônica (utilizando uma lista encadeada, conforme discutido na aula de estruturas de dados).
  • Exercício: Implementar no Linux uma lista de frequencia eletrônica (cadastro de alunos, dados do professor), utilizando uma lista encadeada, conforme discutido na aula de estruturas de dados (aula anterior).
10 [15/out]
  • Estruturas de dados em C++: Vetor, Matriz, Listas, Filas, Pilhas, Grafo, Arvore. Exemplo de [Arvore].
  • Demonstração durante a aula de detalhes de operações em estruturas de dados: inclusão, remoção, consulta, listagem, construtor, destrutor.
  • Protipação do clock/calendar da aula 5 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
  • Plataforma Atlys: Testes utilizando o OLED – visando o desenvolvimento do projeto final.
11 [22/out]
  • Exercício: projeto e desenvolvimento de software para controle de uma máquina de venda de refrigerantes (vending machine). Será exercitado o ciclo completo de projeto, incluindo o levantamento de requisitos, descrição do projeto com máquina de estados finita (FSM), codificação, implementação e testes. [Sugestão de solução]
  • Protipação da vending machine na Atlys com Leon3 – solução para a implementação da vending machine, 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
12 [29/out]
  • Funções Template e Classes TemplateNotas de aula e exemplos. Uso de templates nas estruturas de dados (ex. nodo em lista encadeda).
  • Exercício: Adaptar o programa da CShape3d para utilização de templates, possibilitando o cálculo de volumes com float e inteiro.
  • ExercícioHerança + I/O Linux – Sistema de controle de acesso, com cadastro de usuarios em um vetor, e diversos tipos de leitores (codigo de barras, RFID, …).
13 [05/nov]
  • Desenvolvimento de classes para utilização no projeto final:
    • Classe “Fila”, onde cada nodo deverá armazenar o ID de um container, a temperatura, e a data/hora em que a temperatura foi obtida.
    • Classe “I2C”, utilizada para a comunicação entre a plataforma Atlys e as placas MSP430. Essa classe deve prover os métodos necessários para uma comunicação baseada no protocolo I2C.
    • Classe “SPI” utilizada para a comunicação entre o MSP430 e os periféricos (sensor de temperatura e RTC), e também entre o Leon3 e o display OLED da Atlys. Essa classe deve prover os métodos necessários para uma comunicação baseada no protocolo SPI.
    • Classe “ComunicaComHost” utilizada para o envio dos dados da fila para o computador que funcionará como o webserver.
    • Classe “ComunicaComAtlys” utilizada para a recepção de dados recebidos da Atlys.
14 [12/nov]
  • Exercício sobre polimorfismo: implementar as classes necessárias para que o programa testCShape3d funcione corretamente.
  • Exercício friends/sobrecarga operadores: Implementação do “calendário com data/hora” (herança múltipla) na Atlys, utilizando o conceito de sobrecarga de operadores e friends [ver exercício 2].
15 [19/nov]
  • System-on-a-Chip (SoC): Plataforma DE1-SoC Cyclone V da Altera, ARM (dual core Cortex A9) + FPGA
16 [26/nov]
17 [03/dez]

Artigos da disciplina:

  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