Programação de sistemas embarcados: Introdução
Prof. Rodrigo Maximiano Antunes de Almeida
Universidade Federal de Itajubá
rodrigomax@unifei.edu.br
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 1 / 25
Dados Importantes
Teórica:
Local ⇒ Sala I.2.1.11
Horário ⇒ 15:45-17:35 (ter)
Laboratório:
Local ⇒ Sala LEC I
Horário ⇒
P1: 8:00-9:45 (sex) ELT024
P2: 10:15-12:00 (sex) ELT024
P3: 15:50-17:30 (qui) ELT024
P1: 13:30-15:10 (ter) ELT802
Levar a placa + adaptador de tomada
Datas Importantes *:
Prova 01 ⇒ 25/09
Prova 02 ⇒ 11/12
Sub ⇒ 18/12
* Datas
Todas as datas estão sujeitas a alterações
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 2 / 25
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 and
HCS12. BARRETT,Steven F; PACK, Daniel J., Prentice Hall, 2005
C completo e total. Herbert Schildt. Makron Books. 3
a Edição. 1997.
The art of Programming Embedded Systems, Ganssle, J. Academic
Press, 1991
*Erros na apostila
Cada erro vale 1 (um) ponto na média, saturado em 10 pontos.
Os erros encontrados devem ser enviados via e-mail:
rodrigomax@unifei.edu.br/rmaalmeida@gmail.com indicando lugar do erro e número de
matrícula do aluno.
Será considerado apenas o primeiro e-mail.
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 3 / 25
Sistemas Embarcados
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 4 / 25
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çãorodrigomax@unifei.edu.br 5 / 25
Introdução
Linguagem C
Lógica de Programação
é necessária para as pessoas que desejam trabalhar com
desenvolvimento de programas e sistemas
permite denir uma sequência natural de atividades com a intenção de
atingir um objetivo
Lógica de Programação
É a técnica de encadear pensamentos em uma sequência lógica para atingir
um determinado objetivo.
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 6 / 25
Introdução
Linguagem C
Firmware
Hardware
Sistema Operacional
Aplicação
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 7 / 25
Introdução
Linguagem C
Fonte: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 8 / 25
Introdução
Linguagem C
Fonte: http://www.embedded.com/design/218600142
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 9 / 25
Introdução
Hardware 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çãorodrigomax@unifei.edu.br 10 / 25
Introdução
Ambiente 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çãorodrigomax@unifei.edu.br 11 / 25
Linguagem C
Indentaçã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 especica 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çãorodrigomax@unifei.edu.br 12 / 25
Linguagem C
Comentários
Comentários são textos no meio do programa fonte com a intenção de
explicar ou esclarecer um trecho do código
1 #include  s t d i o . h
2 #define DIST 260 // d i s t â n c i a entre SP e I t a
3 int main ( int argc , char* argv [ ] )
4 {
5 /* esse programa s e r v e para
6 mostrar como se i n s e r e comentários */
7 printf ( São Paulo está %d Km de Itajubá , DIST ) ;
8 return 0 ;
9 }
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 13 / 25
Linguagem C
Arquivos .c e .h
Arquivo de código (code)
terminado com a extensão .c
contém a implementação do código
é compilado gerando um arquivo .o
Arquivo de cabeçalho (header)
terminado com a extensão .h
contém apenas denes e protótipos
não é compilado
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 14 / 25
Linguagem C
Arquivos .c e .h
1 // v a r i á v e l usada apenas dentro deste arquivo
2 static char temp ;
3 // v a r i á v e l que s erá usada também f o r a do arquivo
4 static char valor ;
5 // funções usadas dentro e f o r a do arquivo
6 void MudaDigito ( char val ) {
7 valor = val ;
8 }
9 char LerDigito ( void) {
10 return valor ;
11 }
12 void InicializaDisplays ( void) {
13 // código da função
14 }
15 // função usada apenas dentro deste arquivo
16 void AtualizaDisplay ( void) {
17 // código da função
18 }
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 15 / 25
Linguagem C
Arquivos .c e .h
1 #ifndef VAR_H
2 #define VAR_H
3 void MudaDigito ( char val ) ;
4 char LerDigito ( void) ;
5 void InicializaDisplays ( void) ;
6 #endif //VAR_H
Atenção
Não existe a função AtualizaDisplay()
A variável digito só pode ser lida ou gravada pelas funções
MudarDigito() e LerDigito()
Cuidado com o overhead de funções
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 16 / 25
Linguagem C
Diretivas de compilação
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 17 / 25
Linguagem C
Diretivas 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 #, conhecido
como jogo da velha ou hash.
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 18 / 25
Linguagem C
#dene
A diretiva #dene é utilizada para que o código fonte seja modicado
antes de ser compilado.
1 #define CONST 15
2 void main ( void)
3 {
4 printf ( %d , CONST * 3 ) ;
5 }
7 // depois de compilado
8 void main ( void)
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çãorodrigomax@unifei.edu.br 19 / 25
Linguagem C
#dene
Função Original Opções de uso com o #dene
Resultado
na Tela
1 void MostraSaidaPadrao ( ) {
2 #ifdef PADRAO Serial
3 char * msg = SERIAL ;
4 #else
5 char * msg = LCD ;
6 #endif
7 printf ( msg ) ;
8 }
1 #include  s t d i o . h
2 #define PADRAO S e r i a l
3 void main ( void)
4 {
5 MostraSaidaPadrao ( ) ;
6 }
SERIAL
1 #include  s t d i o . h
2 #define PADRAO LCD
3 void main ( void)
4 {
5 MostraSaidaPadrao ( ) ;
6 }
LCD
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 20 / 25
Linguagem C
#ifdef, #ifndef, #else e #endif
1 void ImprimirTemp ( char valor ) {
2 #ifdef LCD
3 Imprime_LCD ( valor )
4 #else
5 if ( valor  3 0 ) {
6 led = 1 ;
7 } else{
8 led = 0 ;
9 }
10 #endif //LCD
11 }
Funcionamento
No momento da compilação o pré-compilador irá vericar se a tag LCD foi denida em algum
lugar. Em caso positivo o pré-compilador irá deixar tudo que estiver entre o #ifdef e o #else e
retirará tudo que está entre o #else e o #endif.
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 21 / 25
Linguagem C
Referência circular
A função LerTemperatura() faz um teste: se o valor for maior que um
patamar chama a função EnviaSerial() com o código 0x30.
1 #include serial.h
2 char LerTemperatura ( void) ;
3 void AjustaCalor ( char val ) ;
A função LerSerial() recebe um valor e repassa para a função AjustaCalor().
1 #include temp.h
2 char LerSerial ( void) ;
3 void EnviaSerial ( char val ) ;
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 22 / 25
Linguagem C
Referê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çãorodrigomax@unifei.edu.br 23 / 25
Linguagem C
Referência circular
Solução: criar uma estrutura de controle para pré compilação.
1 #ifndef TAG_CONTROLE
2 #define TAG_CONTROLE
3 // todo o conteúdo do arquivo vem aqui .
5 #endif //TAG_CONTROLE
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 24 / 25
Linguagem C
Referê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çãorodrigomax@unifei.edu.br 25 / 25

Introdução à programação embarcada

  • 1.
    Programação de sistemasembarcados: Introdução Prof. Rodrigo Maximiano Antunes de Almeida Universidade Federal de Itajubá rodrigomax@unifei.edu.br ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 1 / 25
  • 2.
    Dados Importantes Teórica: Local ⇒Sala I.2.1.11 Horário ⇒ 15:45-17:35 (ter) Laboratório: Local ⇒ Sala LEC I Horário ⇒ P1: 8:00-9:45 (sex) ELT024 P2: 10:15-12:00 (sex) ELT024 P3: 15:50-17:30 (qui) ELT024 P1: 13:30-15:10 (ter) ELT802 Levar a placa + adaptador de tomada Datas Importantes *: Prova 01 ⇒ 25/09 Prova 02 ⇒ 11/12 Sub ⇒ 18/12 * Datas Todas as datas estão sujeitas a alterações ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 2 / 25
  • 3.
    Referências Bibliográcas Notas deAula de Programação de Sistemas Embarcados (ELT024) Almeida, Rodrigo M.A., Unifei 2013* Embedded systems: design and applications with the 68HC12 and HCS12. BARRETT,Steven F; PACK, Daniel J., Prentice Hall, 2005 C completo e total. Herbert Schildt. Makron Books. 3 a Edição. 1997. The art of Programming Embedded Systems, Ganssle, J. Academic Press, 1991 *Erros na apostila Cada erro vale 1 (um) ponto na média, saturado em 10 pontos. Os erros encontrados devem ser enviados via e-mail: rodrigomax@unifei.edu.br/rmaalmeida@gmail.com indicando lugar do erro e número de matrícula do aluno. Será considerado apenas o primeiro e-mail. ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 3 / 25
  • 4.
    Sistemas Embarcados ELT024 Programaçãode sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 4 / 25
  • 5.
    Tópicos da Disciplina LinguagemC 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çãorodrigomax@unifei.edu.br 5 / 25
  • 6.
    Introdução Linguagem C Lógica deProgramação é necessária para as pessoas que desejam trabalhar com desenvolvimento de programas e sistemas permite denir uma sequência natural de atividades com a intenção de atingir um objetivo Lógica de Programação É a técnica de encadear pensamentos em uma sequência lógica para atingir um determinado objetivo. ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 6 / 25
  • 7.
    Introdução Linguagem C Firmware Hardware Sistema Operacional Aplicação ELT024Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 7 / 25
  • 8.
    Introdução Linguagem C Fonte: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html ELT024Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 8 / 25
  • 9.
    Introdução Linguagem C Fonte: http://www.embedded.com/design/218600142 ELT024Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 9 / 25
  • 10.
    Introdução Hardware Utilizado Kit dedesenvolvimento 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çãorodrigomax@unifei.edu.br 10 / 25
  • 11.
    Introdução Ambiente de Programação Ferramentasa 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çãorodrigomax@unifei.edu.br 11 / 25
  • 12.
    Linguagem C Indentação epadrã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 especica 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çãorodrigomax@unifei.edu.br 12 / 25
  • 13.
    Linguagem C Comentários Comentários sãotextos no meio do programa fonte com a intenção de explicar ou esclarecer um trecho do código 1 #include s t d i o . h 2 #define DIST 260 // d i s t â n c i a entre SP e I t a 3 int main ( int argc , char* argv [ ] ) 4 { 5 /* esse programa s e r v e para 6 mostrar como se i n s e r e comentários */ 7 printf ( São Paulo está %d Km de Itajubá , DIST ) ; 8 return 0 ; 9 } ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 13 / 25
  • 14.
    Linguagem C Arquivos .ce .h Arquivo de código (code) terminado com a extensão .c contém a implementação do código é compilado gerando um arquivo .o Arquivo de cabeçalho (header) terminado com a extensão .h contém apenas denes e protótipos não é compilado ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 14 / 25
  • 15.
    Linguagem C Arquivos .ce .h 1 // v a r i á v e l usada apenas dentro deste arquivo 2 static char temp ; 3 // v a r i á v e l que s erá usada também f o r a do arquivo 4 static char valor ; 5 // funções usadas dentro e f o r a do arquivo 6 void MudaDigito ( char val ) { 7 valor = val ; 8 } 9 char LerDigito ( void) { 10 return valor ; 11 } 12 void InicializaDisplays ( void) { 13 // código da função 14 } 15 // função usada apenas dentro deste arquivo 16 void AtualizaDisplay ( void) { 17 // código da função 18 } ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 15 / 25
  • 16.
    Linguagem C Arquivos .ce .h 1 #ifndef VAR_H 2 #define VAR_H 3 void MudaDigito ( char val ) ; 4 char LerDigito ( void) ; 5 void InicializaDisplays ( void) ; 6 #endif //VAR_H Atenção Não existe a função AtualizaDisplay() A variável digito só pode ser lida ou gravada pelas funções MudarDigito() e LerDigito() Cuidado com o overhead de funções ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 16 / 25
  • 17.
    Linguagem C Diretivas decompilação ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 17 / 25
  • 18.
    Linguagem C Diretivas decompilaçã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 #, conhecido como jogo da velha ou hash. ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 18 / 25
  • 19.
    Linguagem C #dene A diretiva#dene é utilizada para que o código fonte seja modicado antes de ser compilado. 1 #define CONST 15 2 void main ( void) 3 { 4 printf ( %d , CONST * 3 ) ; 5 } 7 // depois de compilado 8 void main ( void) 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çãorodrigomax@unifei.edu.br 19 / 25
  • 20.
    Linguagem C #dene Função OriginalOpções de uso com o #dene Resultado na Tela 1 void MostraSaidaPadrao ( ) { 2 #ifdef PADRAO Serial 3 char * msg = SERIAL ; 4 #else 5 char * msg = LCD ; 6 #endif 7 printf ( msg ) ; 8 } 1 #include s t d i o . h 2 #define PADRAO S e r i a l 3 void main ( void) 4 { 5 MostraSaidaPadrao ( ) ; 6 } SERIAL 1 #include s t d i o . h 2 #define PADRAO LCD 3 void main ( void) 4 { 5 MostraSaidaPadrao ( ) ; 6 } LCD ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 20 / 25
  • 21.
    Linguagem C #ifdef, #ifndef,#else e #endif 1 void ImprimirTemp ( char valor ) { 2 #ifdef LCD 3 Imprime_LCD ( valor ) 4 #else 5 if ( valor 3 0 ) { 6 led = 1 ; 7 } else{ 8 led = 0 ; 9 } 10 #endif //LCD 11 } Funcionamento No momento da compilação o pré-compilador irá vericar se a tag LCD foi denida em algum lugar. Em caso positivo o pré-compilador irá deixar tudo que estiver entre o #ifdef e o #else e retirará tudo que está entre o #else e o #endif. ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 21 / 25
  • 22.
    Linguagem C Referência circular Afunção LerTemperatura() faz um teste: se o valor for maior que um patamar chama a função EnviaSerial() com o código 0x30. 1 #include serial.h 2 char LerTemperatura ( void) ; 3 void AjustaCalor ( char val ) ; A função LerSerial() recebe um valor e repassa para a função AjustaCalor(). 1 #include temp.h 2 char LerSerial ( void) ; 3 void EnviaSerial ( char val ) ; ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 22 / 25
  • 23.
    Linguagem C Referê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çãorodrigomax@unifei.edu.br 23 / 25
  • 24.
    Linguagem C Referência circular Solução:criar uma estrutura de controle para pré compilação. 1 #ifndef TAG_CONTROLE 2 #define TAG_CONTROLE 3 // todo o conteúdo do arquivo vem aqui . 5 #endif //TAG_CONTROLE ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 24 / 25
  • 25.
    Linguagem C Referê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çãorodrigomax@unifei.edu.br 25 / 25