Transcript
Page 1: Introdução à programação embarcada

Programação de sistemas embarcados: Introdução

Prof. Rodrigo Maximiano Antunes de Almeida

Universidade Federal de Itajubá

[email protected]

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 1 / 25

Page 2: Introdução à programação embarcada

Dados Importantes

Teórica:Local ⇒ Sala I.2.1.11Horário ⇒ 15:45-17:35 (ter)

Laboratório:Local ⇒ Sala LEC IHorário ⇒

P1: 8:00-9:45 (sex) ELT024P2: 10:15-12:00 (sex) ELT024P3: 15:50-17:30 (qui) ELT024P1: 13:30-15:10 (ter) ELT802

Levar a placa + adaptador de tomadaDatas Importantes *:

Prova 01 ⇒ 25/09Prova 02 ⇒ 11/12Sub ⇒ 18/12

* Datas

Todas as datas estão sujeitas a alterações

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 2 / 25

Page 3: Introdução à programação embarcada

Referências Bibliográ�cas

Notas de Aula de Programação de Sistemas Embarcados (ELT024)Almeida, Rodrigo M.A., Unifei 2013*

Embedded systems: design and applications with the 68HC12 andHCS12. BARRETT,Steven F; PACK, Daniel J., Prentice Hall, 2005

C completo e total. Herbert Schildt. Makron Books. 3a Edição. 1997.

The art of Programming Embedded Systems, Ganssle, J. AcademicPress, 1991

*Erros na apostilaCada erro vale 1 (um) ponto na média, saturado em 10 pontos.

Os erros encontrados devem ser enviados via e-mail:[email protected]/[email protected] indicando lugar do erro e número dematrícula do aluno.

Será considerado apenas o primeiro e-mail.

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 3 / 25

Page 4: Introdução à programação embarcada

Sistemas Embarcados

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 4 / 25

Page 5: Introdução à programação embarcada

Tópicos da Disciplina

Linguagem C

Hardware utilizado

Ambiente de programação

Programação em C para sistemas embarcados

Indentação e padrão de escrita

Comentários

Arquivos .c e .h

Diretivas de compilação

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 5 / 25

Page 6: Introdução à programação embarcada

IntroduçãoLinguagem C

Lógica de Programação

é necessária para as pessoas que desejam trabalhar comdesenvolvimento de programas e sistemas

permite de�nir uma sequência natural de atividades com a intenção deatingir um objetivo

Lógica de Programação

É a técnica de encadear pensamentos em uma sequência lógica para atingirum determinado objetivo.

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 6 / 25

Page 7: Introdução à programação embarcada

IntroduçãoLinguagem C

Firmware

Hardware

Sistema Operacional

Aplicação

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 7 / 25

Page 8: Introdução à programação embarcada

IntroduçãoLinguagem C

Fonte: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 8 / 25

Page 9: Introdução à programação embarcada

IntroduçãoLinguagem C

Fonte: http://www.embedded.com/design/218600142

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 9 / 25

Page 10: Introdução à programação embarcada

IntroduçãoHardware Utilizado

Kit de desenvolvimento PIC18f4550

1 display LCD 2 linhas por 16 caracteres

4 displays de 7 segmentos multiplexados

8 leds ligados ao mesmo barramento dos displays

16 mini switches organizadas em formato matricial 4x4

1 sensor de temperatura LM35C

1 resistência de aquecimento ligada à uma saída PWM

1 buzzer ligada à uma saída PWM

1 motor DC tipo ventilador à uma saída PWM

1 canal de comunicação serial padrão RS-232

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 10 / 25

Page 11: Introdução à programação embarcada

IntroduçãoAmbiente de Programação

Ferramentas a serem utilizadas:

IDE: MPLAB 8.92 - Proprietário

Compilador: SDCC 2.9.0 (win32) - GPL

Linker/Assembler: GPUtils 0.13.7 (win32) - GPL

Plugin MPLAB: sdcc-mplab 0.1 - GPL

Cuidado

O processo de instalação exige certos cuidados. Referenciem pela apostila.

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 11 / 25

Page 12: Introdução à programação embarcada

Linguagem CIndentação e padrão de escrita

O estilo adotado é conhecido como estilo �Allman�, �bsd� (no emacs)ou ANSI.

Todos os documentos do padrão ANSI C utilizam este estilo.

Apesar disto o padrão ANSI C não especi�ca um estilo para ser usado.

Atenção

Detalhes não são importantes. A coerência dentro do projeto sim.

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 12 / 25

Page 13: Introdução à programação embarcada

Linguagem CComentários

Comentários são textos no meio do programa fonte com a intenção deexplicar ou esclarecer um trecho do código

1 #inc lude <s t d i o . h>2 #def ine DIST 260 // d i s t â n c i a e n t r e SP e I t a3 i n t main ( i n t argc , char * argv [ ] )4 {5 /* e s s e programa s e r v e para6 most ra r como se i n s e r e comentá r i o s */7 printf ( "São Paulo está %d Km de Itajubá" , DIST ) ;8 re tu rn 0 ;9 }

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 13 / 25

Page 14: Introdução à programação embarcada

Linguagem CArquivos .c e .h

Arquivo de código (code)terminado com a extensão .ccontém a implementação do códigoé compilado gerando um arquivo .o

Arquivo de cabeçalho (header)terminado com a extensão .hcontém apenas de�nes e protótiposnão é compilado

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 14 / 25

Page 15: Introdução à programação embarcada

Linguagem CArquivos .c e .h

1 // v a r i á v e l usada apenas den t ro d e s t e a r qu i v o2 s t a t i c char temp ;3 // v a r i á v e l que s e r á usada também f o r a do a r qu i v o4 s t a t i c char valor ;5 // funçõe s usadas den t ro e f o r a do a r qu i v o6 vo id MudaDigito ( char val ) {7 valor = val ;8 }9 char LerDigito ( vo id ) {10 re tu rn valor ;11 }12 vo id InicializaDisplays ( vo id ) {13 // cód igo da função14 }15 // função usada apenas den t ro d e s t e a r qu i v o16 vo id AtualizaDisplay ( vo id ) {17 // cód igo da função18 }

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 15 / 25

Page 16: Introdução à programação embarcada

Linguagem CArquivos .c e .h

1 #i f n d e f VAR_H2 #define VAR_H

3 vo id MudaDigito ( char val ) ;4 char LerDigito ( vo id ) ;5 vo id InicializaDisplays ( vo id ) ;6 #end i f //VAR_H

Atenção

Não existe a função AtualizaDisplay()

A variável �digito� só pode ser lida ou gravada pelas funçõesMudarDigito() e LerDigito()

Cuidado com o overhead de funções

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 16 / 25

Page 17: Introdução à programação embarcada

Linguagem CDiretivas de compilação

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 17 / 25

Page 18: Introdução à programação embarcada

Linguagem CDiretivas de compilação

As diretivas de compilação são instruções dadas ao compilador.

Elas não são executadas.

As diretivas de compilação começam com um sinal #, conhecidocomo jogo da velha ou hash.

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 18 / 25

Page 19: Introdução à programação embarcada

Linguagem C#de�ne

A diretiva #de�ne é utilizada para que o código fonte seja modi�cadoantes de ser compilado.

1 #def ine CONST 152 vo id main ( vo id )3 {4 printf ( "%d" , CONST * 3) ;5 }

7 // d epo i s de compi lado8 vo id main ( vo id )9 {10 printf ( "%d" , 15 * 3) ;11 // é p o s s í v e l : p r i n t f ("%d" , 45) ;12 }

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 19 / 25

Page 20: Introdução à programação embarcada

Linguagem C#de�ne

Função Original Opções de uso com o #de�neResultadona Tela

1 vo id MostraSaidaPadrao ( ) {2 #ifdef PADRAO Serial

3 char * msg = "SERIAL" ;4 #e l s e5 char * msg = "LCD" ;6 #endif

7 printf ( msg ) ;8 }

1 #inc lude <s t d i o . h>2 #def ine PADRAO S e r i a l3 vo id main ( vo id )4 {5 MostraSaidaPadrao ( ) ;6 }

SERIAL

1 #inc lude <s t d i o . h>2 #def ine PADRAO LCD3 vo id main ( vo id )4 {5 MostraSaidaPadrao ( ) ;6 }

LCD

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 20 / 25

Page 21: Introdução à programação embarcada

Linguagem C#ifdef, #ifndef, #else e #endif

1 vo id ImprimirTemp ( char valor ) {2 #ifdef LCD

3 Imprime_LCD ( valor )4 #e l s e5 i f ( valor > 30) {6 led = 1 ;7 } e l s e {8 led = 0 ;9 }10 #endif //LCD11 }

Funcionamento

No momento da compilação o pré-compilador irá veri�car se a �tag� LCD foi de�nida em algumlugar. Em caso positivo o pré-compilador irá deixar tudo que estiver entre o #ifdef e o #else eretirará tudo que está entre o #else e o #endif.

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 21 / 25

Page 22: Introdução à programação embarcada

Linguagem CReferência circular

A função LerTemperatura() faz um teste: se o valor for maior que umpatamar chama a função EnviaSerial() com o código 0x30.

1 #inc lude "serial.h"

2 char LerTemperatura ( vo id ) ;3 vo id AjustaCalor ( char val ) ;

A função LerSerial() recebe um valor e repassa para a função AjustaCalor().

1 #inc lude "temp.h"

2 char LerSerial ( vo id ) ;3 vo id EnviaSerial ( char val ) ;

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 22 / 25

Page 23: Introdução à programação embarcada

Linguagem CReferência circular

#include “serial.h”

char LerTemperatura(void);void AjustaCalor(char val);

temp.h

#include “temp.h”

char LerSerial(void);void EnviaSerial(char val);

serial.h

#include “serial.h”

char LerTemperatura(void);void AjustaCalor(char val);

temp.h

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 23 / 25

Page 24: Introdução à programação embarcada

Linguagem CReferência circular

Solução: criar uma estrutura de controle para pré compilação.

1 #i f n d e f TAG_CONTROLE2 #define TAG_CONTROLE

3 // todo o conteúdo do a r qu i v o vem aqu i .

5 #end i f //TAG_CONTROLE

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 24 / 25

Page 25: Introdução à programação embarcada

Linguagem CReferência circular

Solução: criar uma estrutura de controle para pré compilação.

#infdef TEMP_H #define TEMP_H #include “serial.h”

char LerTemperatura(void); void AjustaCalor(char val);#endif

temp.h

#infdef SERIAL_H #define SERIAL_H #include “temp.h”

char LerSerial(void); void EnviaSerial(char val);#endif

serial.h

#infdef TEMP_H

//tag já definida, //pula o conteúdo

#endif

temp.h

ELT024 Programação de sistemas embarcados: Introduçã[email protected] 25 / 25