UNIVERSIDADE FEDERAL DE UBERLÂNDIA
Faculdade de Engenharia Elétrica

Av. João Naves de Ávila, 2121, Bloco 3N - Bairro Santa Mônica, Uberlândia-MG, CEP 38400-902
Telefone: (34) 3239-4701/4702 - www.feelt.ufu.br - feelt@ufu.br
  

Timbre

Plano de Ensino

IDENTIFICAÇÃO

Componente Curricular:

Sistemas Embarcados II

Unidade Ofertante:

Faculdade de Engenharia Elétrica

Código:

FEELT39015

Período/Série:

Turma:

A/A1/A3

Carga Horária:

Natureza:

Teórica:

30 (2)

Prática:

30 (2) 

Total:

60 (4)

Obrigatória:

(x)

Optativa:

( )

Professor(A):

Éder Alves de Moura

Ano/Semestre:

2021/01

Observações:

A disciplina será ministrada em conformidade com as Resoluções N° 25/2020 e 11/2021 do CONGRAD.

 

EMENTA

Desenvolvimento de sistemas embarcados microprocessados, integração com serviços em rede ou nuvem, interfaces homem/máquina (HMI).

JUSTIFICATIVA

Essa disciplina aplica os conceitos teóricos do desenvolvimento de software, de sistemas computacionais conectados e tecnologias eletrônicas para o desenvolvimento de sistemas embarcados. Esses são sistemas computacionais completos e independentes, desenvolvidos para uma tarefa específica e que estão presentes em diversas áreas e aplicações de engenharia.

OBJETIVO

Objetivo Geral:

Desenvolvimento de sistemas embarcados com hardware de complexidade média ou alta, com foco em comunicação e interatividade com o usuário, em geral executando sistemas operacionais de alto nível.  

Objetivos Específicos:

1. Uso de Linux embarcado ou de sistema operacional equivalente. Construção e aplicação de imagens;

2. Criação de interfaces homem máquina através de toolkits gráficos;

3. Integração e uso de stacks diversos de comunicação;

4. Programação com linguagem de script ou de desenvolvimento rápido;

5. Utilização de serviços em nuvem para automação e controle;

6. Interfaceamento com periféricos de comunicação e informação (GPS, modems, Bluetooth, WiFi, entre outros);

7. Utilização de redes com e sem fio no processo de integração;

8. Atualização de firmware no campo (OTA - Over the Air);

9. Segurança em sistemas embarcados.

PROGRAMA

1. Linux Embarcado

1.1. Breve histórico sobre UNIX

1.2. Linux

1.3. Por que utilizar Linux em sistemas embarcados?

1.4. Anatomia de um sistema embarcado

1.5. Considerações sobre armazenamento

1.6. Distribuições Linux para sistemas embarcados

2. Processadores

2.1. Processadores Stand-Alone

2.2. Processadores Integrados (Systems on Chip)

2.3. Outras Arquiteturas

2.4. Plataformas de hardware

3. O Kernel Linux

3.1. Background

3.2. Kernel

3.3. Construção

3.4. Sistemas construtores de Kernel

3.5. Kernel customizados e documentação

3.6. Inicialização

3.7. Fluxo de controle

3.8. Inicializando subsistemas

4. Inicialização do espaço do usuário

4.1. Sistemas de arquivos Root

4.2. O processo de inicialização

4.3. Disco RAM inicial

4.4. Utilizando initramfs

4.5. Shutdown

5. Bootloaders

6. Device Driver

7. Subsistemas MTD

7.1. Introdução

7.2. Partições

7.3. Utilitários

7.4. Conceitos sobre Device Driver

7.5. Módulos

7.6. Métodos

7.7. Device Driver e GPL

8. Ambiente de Desenvolvimento Embarcado

10. Ferramentas de Desenvolvimento

10.1. GNU Debugger

10.2. Ferramentas de Tracing e Profiling

10.3. Utilitários Binários

10.4. Técnicas de Depuração de Kernel

11. Ferramentas de depuração para aplicações em Linux embarcado

12. Linux e Sistemas em Tempo Real

12.1. O que é um sistema de Tempo Real

12.2. Preempção do Kernel

12.3. Real-Time Kernel Patch

12.4. Análise de desempenho do Real-Time Kernel

13. Ferramentas de desenvolvimento para IHM

13.1. Compilação cruzada

13.2. Desenvolvimento de interfaces gráficas

14. Sistemas GSM e GPS

14.1. Definição de sistemas GSM

14.2. Definição de sistemas GPS

14.3. Tipos de aplicação

15. Aplicações para Sistemas Embarcados

15.1. Comunicação Serial

15.2. IHM de dados com interface serial

15.3. Interação com redes GSM, comandos AT

15.4. Geração de informações de posicionamento

15.5. Interação com sistemas em nuvem (AWS)

15.6. Construção de Gateway MQTT com interface para sistemas em nuvem (AWS)

15.7. Reconhecimento facial em nuvem

METODOLOGIA

A presente componente curricular possui carga horária total de 60 horas / 72 ha (hora-aula, com duração de 50 min), a ser ministrada em formato remoto. Todas as aulas serão ministradas na modalidade síncrona (todos os alunos simultaneamente conectados à internet sob a regência do professor). Essa modalidade está prevista na Resolução nº 20/2020 do Conselho de Graduação. Para tal efeito, serão consideradas:

 

Tabela 1 – Cronograma de aulas teóricas.

Semana

Data

Conteúdo

01

29/11

Linux com plataforma para o desenvolvimento de sistemas embarcados

02

06/12

Interação hardware, sistema operacional e software dos sistemas embarcados

03

13/12

Programação em script com Python

04

20/12

Multiprocessamento e programação concorrente

~

27/12

RECESSO

~

03/01

RECESSO

05

10/01

Comunicação interprocesso via socket

06

17/01

Linux como servidor de recursos: FTP / SSH / Web

07

24/01

Desenvolvimento de aplicações Web no backend

08

31/01

Desenvolvimento de interface gráfica com QT: Python

09

07/02

Compilação cruzada e toolchains

10

14/02

Customização de distribuições Linux para sistemas embarcados

11

21/02

Customização de distribuições Linux para sistemas embarcados

~

28/02

RECESSO

12

07/03

Programação de módulos para o Kernel do Linux

13

14/03

Programação de módulos para o Kernel do Linux

14

21/03

Configuração de aplicações e atualização OTA

15

28/03

Segurança em aplicações de sistemas embarcados

16

~

Revisão de conceitos de sistemas de controle

17

~

Implementação de controladores SISO em sistemas embarcados

18

~

Implementação de controladores MIMO em sistemas embarcados

 

02/04

TÉRMINO DO SEMESTRE

 

Tabela 2 – Cronograma de aulas de laboratório.

Semana

Data
Turma A1

Data
Turma A3

Conteúdo

01

29/11

02/12

Instalação e configuração do ambiente Linux. Programação e

02

06/12

09/12

Ambientação na linguagem Python

03

13/12

16/12

Implementação de aplicações com Python

04

20/12

~

Multiprocessamento e programação concorrente

 

27/12

30/12

RECESSO

05

~

06/01

Comunicação interprocesso via socket

06

10/01

13/01

Implementação de uma página Desenvolvimento de aplicações Web com HTML/CSS/Javascript

07

17/01

20/01

Desenvolvimento de aplicações Web no backend

08

31/01

03/02

Desenvolvimento de interface gráfica com QT: Python

09

07/02

10/02

Compilação cruzada e toolchains

10

14/02

17/02

Apresentação do primeiro trabalho

11

21/02

24/02

Customização de distribuições Linux para sistemas embarcados

12

~

03/03

Programação de módulos para o Kernel do Linux

13

07/03

10/03

Programação de módulos para o Kernel do Linux

14

14/03

17/03

Configuração de aplicações e atualização OTA

15

21/03

24/03

Segurança em aplicações de sistemas embarcados

16

28/03

31/03

Apresentação do segundo trabalho

17

~

~

Implementação de controladores SISO em sistemas embarcados

18

~

~

Implementação de controladores MIMO em sistemas embarcados

As aulas sem data definida, indicadas pelo símbolo ~, serão realizadas em modo síncrono, com data a ser combinada com os discentes, a fim de completar a carga horária necessária da disciplina.

AVALIAÇÃO

As avaliações serão divididas em trabalhos semanais e dois trabalhos práticos, totalizando 100 pontos, distribuídos em: 50 pontos em trabalhos semanais (incluindo a parte teórica e laboratórios, com pesos iguais entre si) e 50 pontos em trabalhos práticos. Os trabalhos semanais poderão compreender uma ou combinação das seguintes possibilidades: questionários; relatórios; programação; pesquisas; configurações. Os trabalhos práticos consistirão de simulação e/ou implementação de uma aplicação de sistema embarcado (real ou simulado), utilizando das técnicas apresentadas durante a disciplina e conhecimentos compatíveis com o nível de formação esperado, cujos tema e critérios de avaliação serão definidos pelo professor.

BIBLIOGRAFIA

Básica

  1. ALMEIDA, R.; MORAES, C.; SERAPHIM, T. Programação de sistemas embarcados: desenvolvendo software para microcontroladores em linguagem C. Rio de Janeiro: Elsivier, 2016.
  2.  MATTHEW, Neil.; STONES, Richard. Beginning Linux programming. [s.l.]: Wiley, 2007.
  3. MOLLOY, Derek. Exploring Raspberry Pi: Interfacing to the Real World with Embedded Linux. New York: John Wiley & Sons, 2016.
  4. SALVADOR, Otavio; ANGOLINI, Daiane.  Embedded  Linux  development  with  Yocto Project. Birmingham: Packt Publishing, 2014.
  5. YIU, J. The Definitive Guide to ARM Cortex-M3 and Cortex-M4 Processors. 3a ed. [s.l.]: Newnes/Elsevier, 2014.

Complementar

  1. BACKES, André. Linguagem C: completa e descomplicada. Rio de Janeiro: Elsevier, 2013.
  2.  BARR, Michael; MASSA, Anthony. Programming embedded systems: with C and GNU development tools. O'Reilly Media, 2006.
  3. GRENNING, James W. Test Driven Development for Embedded C. [S. l.]: Pragma c Bookshelf, 2011.
  4. KLEMENS, Ben. 21st Century C: C ps from the New School. [S. l.]: O'Reilly Media, 2015.
  5.  HOOK, Brian. Write portable code: An Introduytion to Developing Software for Multiple Platforms. [S. l.]: No Starch Press, 2005.
  6. HYDE, Randall. Write great code: understanding the machine. v. 1. [S. l.]: No Starch Press, 2012.
  7. MONTGOMERY, Stephen L. MISRA. C: Guidelines for the Use of the C Language in Critical Systems 2012. [S. l.]: Misra, 2013.
  8. PRESSMAN, Roger S. Engenharia de software: uma abordagem profissional. 8. ed. Porto Alegre: McGraw-Hill, 2016.
  9. SINK, E. Version Control by Example. [S. l.]: Pyrenean Gold Press, 2011.
  10. TANENBAUM, Andrew S. Organização estruturada de computadores. São Paulo: Pearson, 2013.
  11. WHITE, E. Making Embedded Systems: Design Patterns for Great Software. [S. l.]: O'Reilly Media, 2014.

APROVAÇÃO

Aprovado em reunião do Colegiado realizada em: ____/____/______

Coordenação do Curso de Graduação: _________________________

 


logotipo

Documento assinado eletronicamente por Eder Alves de Moura, Professor(a) do Magistério Superior, em 13/11/2021, às 00:00, conforme horário oficial de Brasília, com fundamento no art. 6º, § 1º, do Decreto nº 8.539, de 8 de outubro de 2015.


QRCode Assinatura

A autenticidade deste documento pode ser conferida no site https://www.sei.ufu.br/sei/controlador_externo.php?acao=documento_conferir&id_orgao_acesso_externo=0, informando o código verificador 3173857 e o código CRC 6348766F.




Referência: Processo nº 23117.071223/2021-82 SEI nº 3173857