SlideShare uma empresa Scribd logo
1 de 25
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

[8/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[8/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...[8/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[8/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...Marcelo Barros de Almeida
 
Pentium pro trabalho
Pentium pro   trabalhoPentium pro   trabalho
Pentium pro trabalhoRafael Cruz
 
Webinar: Projeto de Hardware: ASIC e FPGA
Webinar: Projeto de Hardware: ASIC e FPGAWebinar: Projeto de Hardware: ASIC e FPGA
Webinar: Projeto de Hardware: ASIC e FPGAEmbarcados
 
Descrição dos componentes
Descrição dos componentesDescrição dos componentes
Descrição dos componentesTiago
 
Hardware
HardwareHardware
HardwareTiago
 
Arquitetura de Computadores: Barramentos e instruções
Arquitetura de Computadores: Barramentos e instruçõesArquitetura de Computadores: Barramentos e instruções
Arquitetura de Computadores: Barramentos e instruçõesAlex Camargo
 
1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic1 história e características dos microcontroladores pic
1 história e características dos microcontroladores picAnderson Inácio Morais
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaDeivid Martins
 
Arquitetura pentium
Arquitetura pentiumArquitetura pentium
Arquitetura pentiumEMSNEWS
 
Arquitetura de Computadores: Unidade central de processamento
Arquitetura de Computadores: Unidade central de processamentoArquitetura de Computadores: Unidade central de processamento
Arquitetura de Computadores: Unidade central de processamentoAlex Camargo
 
Arquiteturas de Computadores Paralelos
Arquiteturas de Computadores ParalelosArquiteturas de Computadores Paralelos
Arquiteturas de Computadores ParalelosElaine Cecília Gatto
 
Arquitetura de Computadores: Evolução dos computadores
Arquitetura de Computadores: Evolução dos computadoresArquitetura de Computadores: Evolução dos computadores
Arquitetura de Computadores: Evolução dos computadoresAlex Camargo
 
Manutenção
ManutençãoManutenção
ManutençãoTiago
 
Evolução dos processadores
Evolução dos processadoresEvolução dos processadores
Evolução dos processadoresTiago Garcia
 
Imei módulo2 - ficha formativa nº5
Imei   módulo2 - ficha formativa nº5Imei   módulo2 - ficha formativa nº5
Imei módulo2 - ficha formativa nº5teacherpereira
 
Arquitetura de Computadores: Sistemas de numeração
Arquitetura de Computadores: Sistemas de numeraçãoArquitetura de Computadores: Sistemas de numeração
Arquitetura de Computadores: Sistemas de numeraçãoAlex Camargo
 
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
Fundamentos de Sistemas  Operacionais de Tempo Real - Criando seu próprio esc...Fundamentos de Sistemas  Operacionais de Tempo Real - Criando seu próprio esc...
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...Marcelo Barros de Almeida
 
Pcs2031 projeto01 introducao_pic_v4
Pcs2031 projeto01 introducao_pic_v4Pcs2031 projeto01 introducao_pic_v4
Pcs2031 projeto01 introducao_pic_v4Flávia Martins
 
Imei módulo2 - ficha formativa nº4
Imei   módulo2 - ficha formativa nº4Imei   módulo2 - ficha formativa nº4
Imei módulo2 - ficha formativa nº4teacherpereira
 

Mais procurados (20)

[8/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[8/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...[8/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[8/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
 
Pentium pro trabalho
Pentium pro   trabalhoPentium pro   trabalho
Pentium pro trabalho
 
Webinar: Projeto de Hardware: ASIC e FPGA
Webinar: Projeto de Hardware: ASIC e FPGAWebinar: Projeto de Hardware: ASIC e FPGA
Webinar: Projeto de Hardware: ASIC e FPGA
 
Lista2009 2
Lista2009 2Lista2009 2
Lista2009 2
 
Descrição dos componentes
Descrição dos componentesDescrição dos componentes
Descrição dos componentes
 
Hardware
HardwareHardware
Hardware
 
Arquitetura de Computadores: Barramentos e instruções
Arquitetura de Computadores: Barramentos e instruçõesArquitetura de Computadores: Barramentos e instruções
Arquitetura de Computadores: Barramentos e instruções
 
1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e Distribuída
 
Arquitetura pentium
Arquitetura pentiumArquitetura pentium
Arquitetura pentium
 
Arquitetura de Computadores: Unidade central de processamento
Arquitetura de Computadores: Unidade central de processamentoArquitetura de Computadores: Unidade central de processamento
Arquitetura de Computadores: Unidade central de processamento
 
Arquiteturas de Computadores Paralelos
Arquiteturas de Computadores ParalelosArquiteturas de Computadores Paralelos
Arquiteturas de Computadores Paralelos
 
Arquitetura de Computadores: Evolução dos computadores
Arquitetura de Computadores: Evolução dos computadoresArquitetura de Computadores: Evolução dos computadores
Arquitetura de Computadores: Evolução dos computadores
 
Manutenção
ManutençãoManutenção
Manutenção
 
Evolução dos processadores
Evolução dos processadoresEvolução dos processadores
Evolução dos processadores
 
Imei módulo2 - ficha formativa nº5
Imei   módulo2 - ficha formativa nº5Imei   módulo2 - ficha formativa nº5
Imei módulo2 - ficha formativa nº5
 
Arquitetura de Computadores: Sistemas de numeração
Arquitetura de Computadores: Sistemas de numeraçãoArquitetura de Computadores: Sistemas de numeração
Arquitetura de Computadores: Sistemas de numeração
 
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
Fundamentos de Sistemas  Operacionais de Tempo Real - Criando seu próprio esc...Fundamentos de Sistemas  Operacionais de Tempo Real - Criando seu próprio esc...
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
 
Pcs2031 projeto01 introducao_pic_v4
Pcs2031 projeto01 introducao_pic_v4Pcs2031 projeto01 introducao_pic_v4
Pcs2031 projeto01 introducao_pic_v4
 
Imei módulo2 - ficha formativa nº4
Imei   módulo2 - ficha formativa nº4Imei   módulo2 - ficha formativa nº4
Imei módulo2 - ficha formativa nº4
 

Semelhante a Introdução à programação embarcada

Codificação segura em C para sistemas embarcados
Codificação segura em C para sistemas embarcadosCodificação segura em C para sistemas embarcados
Codificação segura em C para sistemas embarcadoshenriqueprossi
 
Linguagem c wellington telles - aula 02
Linguagem c   wellington telles - aula 02Linguagem c   wellington telles - aula 02
Linguagem c wellington telles - aula 02profwtelles
 
Acesso à memória e registros
Acesso à memória e registrosAcesso à memória e registros
Acesso à memória e registrosRodrigo Almeida
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação CJose Augusto Cintra
 
Revisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas EmbarcadosRevisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas EmbarcadosRodrigo Almeida
 
Algoritmos e LP - Aula 07 - Vetores e Introdução ao C.pdf
Algoritmos e LP - Aula 07 - Vetores e Introdução ao C.pdfAlgoritmos e LP - Aula 07 - Vetores e Introdução ao C.pdf
Algoritmos e LP - Aula 07 - Vetores e Introdução ao C.pdfEnio Filho
 
Webinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosWebinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosEmbarcados
 
Display de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosDisplay de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosRodrigo Almeida
 
Linguagens de programação para controladores lógicos programáveis copia - c...
Linguagens de programação para controladores lógicos programáveis   copia - c...Linguagens de programação para controladores lógicos programáveis   copia - c...
Linguagens de programação para controladores lógicos programáveis copia - c...Juremir Almeida
 
Apostila sobre controlador lógico programável avançado
Apostila sobre controlador lógico programável avançadoApostila sobre controlador lógico programável avançado
Apostila sobre controlador lógico programável avançadoClaudio Arkan
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em CDiego Santos
 

Semelhante a Introdução à programação embarcada (20)

Prova qco-2008.informática
Prova qco-2008.informáticaProva qco-2008.informática
Prova qco-2008.informática
 
Codificação segura em C para sistemas embarcados
Codificação segura em C para sistemas embarcadosCodificação segura em C para sistemas embarcados
Codificação segura em C para sistemas embarcados
 
Linguagem c wellington telles - aula 02
Linguagem c   wellington telles - aula 02Linguagem c   wellington telles - aula 02
Linguagem c wellington telles - aula 02
 
Operações com Bits
Operações com BitsOperações com Bits
Operações com Bits
 
Notas deaulas
Notas deaulasNotas deaulas
Notas deaulas
 
Acesso à memória e registros
Acesso à memória e registrosAcesso à memória e registros
Acesso à memória e registros
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
Rs logix 5000
Rs logix 5000Rs logix 5000
Rs logix 5000
 
Revisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas EmbarcadosRevisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas Embarcados
 
Algoritmos e LP - Aula 07 - Vetores e Introdução ao C.pdf
Algoritmos e LP - Aula 07 - Vetores e Introdução ao C.pdfAlgoritmos e LP - Aula 07 - Vetores e Introdução ao C.pdf
Algoritmos e LP - Aula 07 - Vetores e Introdução ao C.pdf
 
Apostila chardwere
Apostila chardwereApostila chardwere
Apostila chardwere
 
C hardware
C hardwareC hardware
C hardware
 
Cpld top dos tops
Cpld top dos topsCpld top dos tops
Cpld top dos tops
 
Kernel cooperativo
Kernel cooperativoKernel cooperativo
Kernel cooperativo
 
aula_04.pdf
aula_04.pdfaula_04.pdf
aula_04.pdf
 
Webinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosWebinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcados
 
Display de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosDisplay de 7 segmentos multiplexados
Display de 7 segmentos multiplexados
 
Linguagens de programação para controladores lógicos programáveis copia - c...
Linguagens de programação para controladores lógicos programáveis   copia - c...Linguagens de programação para controladores lógicos programáveis   copia - c...
Linguagens de programação para controladores lógicos programáveis copia - c...
 
Apostila sobre controlador lógico programável avançado
Apostila sobre controlador lógico programável avançadoApostila sobre controlador lógico programável avançado
Apostila sobre controlador lógico programável avançado
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em C
 

Mais de Rodrigo Almeida

Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Rodrigo Almeida
 
Embedded systems development Defcon 19
Embedded systems development Defcon 19Embedded systems development Defcon 19
Embedded systems development Defcon 19Rodrigo Almeida
 
As diferentes engenharias
As diferentes engenhariasAs diferentes engenharias
As diferentes engenhariasRodrigo Almeida
 
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Rodrigo Almeida
 
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Rodrigo Almeida
 
Cryptology - Antônio Lacerda
Cryptology - Antônio LacerdaCryptology - Antônio Lacerda
Cryptology - Antônio LacerdaRodrigo Almeida
 
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Rodrigo Almeida
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Rodrigo Almeida
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Rodrigo Almeida
 
Projeto de uma controladora de drivers
Projeto de uma controladora de driversProjeto de uma controladora de drivers
Projeto de uma controladora de driversRodrigo Almeida
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosRodrigo Almeida
 
Kernel com requisitos temporais
Kernel com requisitos temporaisKernel com requisitos temporais
Kernel com requisitos temporaisRodrigo Almeida
 
Definição de processos
Definição de processosDefinição de processos
Definição de processosRodrigo Almeida
 
Conceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersConceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersRodrigo Almeida
 
Introdução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosIntrodução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosRodrigo Almeida
 
Segurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusSegurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusRodrigo Almeida
 
Utilizando um Display de LCD
Utilizando um Display de LCDUtilizando um Display de LCD
Utilizando um Display de LCDRodrigo Almeida
 
Leitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricialLeitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricialRodrigo Almeida
 

Mais de Rodrigo Almeida (20)

Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015
 
Embedded systems development Defcon 19
Embedded systems development Defcon 19Embedded systems development Defcon 19
Embedded systems development Defcon 19
 
As diferentes engenharias
As diferentes engenhariasAs diferentes engenharias
As diferentes engenharias
 
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
 
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
 
Cryptology - Antônio Lacerda
Cryptology - Antônio LacerdaCryptology - Antônio Lacerda
Cryptology - Antônio Lacerda
 
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
 
Projeto de uma controladora de drivers
Projeto de uma controladora de driversProjeto de uma controladora de drivers
Projeto de uma controladora de drivers
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcados
 
Kernel com requisitos temporais
Kernel com requisitos temporaisKernel com requisitos temporais
Kernel com requisitos temporais
 
Definição de processos
Definição de processosDefinição de processos
Definição de processos
 
Ponteiros de Função
Ponteiros de FunçãoPonteiros de Função
Ponteiros de Função
 
Conceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersConceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffers
 
Introdução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosIntrodução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcados
 
Segurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusSegurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virus
 
Comunicação serial
Comunicação serialComunicação serial
Comunicação serial
 
Utilizando um Display de LCD
Utilizando um Display de LCDUtilizando um Display de LCD
Utilizando um Display de LCD
 
Leitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricialLeitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricial
 

Introdução à programação embarcada

  • 1. 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
  • 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 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
  • 4. Sistemas Embarcados ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 4 / 25
  • 5. 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
  • 6. 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
  • 7. Introdução Linguagem C Firmware Hardware Sistema Operacional Aplicação ELT024 Programaçã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 ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 8 / 25
  • 9. Introdução Linguagem C Fonte: http://www.embedded.com/design/218600142 ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 9 / 25
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. Linguagem C Diretivas de compilação ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 17 / 25
  • 18. 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
  • 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 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
  • 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 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
  • 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