SlideShare uma empresa Scribd logo
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

ODP
Sistemas embarcados: motivação e primeiros passos
PDF
[2/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
DOC
Sistemas embarcados
PDF
[4/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
PDF
[6/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
ODP
Projeto de Hardware com Microcontroladores STM32
PDF
[5/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
PDF
[7/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
Sistemas embarcados: motivação e primeiros passos
[2/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
Sistemas embarcados
[4/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[6/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
Projeto de Hardware com Microcontroladores STM32
[5/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[7/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...

Mais procurados (20)

PDF
[8/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
PPTX
Pentium pro trabalho
PDF
Webinar: Projeto de Hardware: ASIC e FPGA
PDF
Lista2009 2
PDF
Descrição dos componentes
PDF
Hardware
PDF
Arquitetura de Computadores: Barramentos e instruções
PDF
1 história e características dos microcontroladores pic
PDF
Mini-curso Programação Paralela e Distribuída
PDF
Arquitetura pentium
PDF
Arquitetura de Computadores: Unidade central de processamento
PPTX
Arquiteturas de Computadores Paralelos
PDF
Arquitetura de Computadores: Evolução dos computadores
PDF
Manutenção
PPTX
Evolução dos processadores
DOC
Imei módulo2 - ficha formativa nº5
PDF
Arquitetura de Computadores: Sistemas de numeração
ODT
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
DOC
Pcs2031 projeto01 introducao_pic_v4
DOC
Imei módulo2 - ficha formativa nº4
[8/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
Pentium pro trabalho
Webinar: Projeto de Hardware: ASIC e FPGA
Lista2009 2
Descrição dos componentes
Hardware
Arquitetura de Computadores: Barramentos e instruções
1 história e características dos microcontroladores pic
Mini-curso Programação Paralela e Distribuída
Arquitetura pentium
Arquitetura de Computadores: Unidade central de processamento
Arquiteturas de Computadores Paralelos
Arquitetura de Computadores: Evolução dos computadores
Manutenção
Evolução dos processadores
Imei módulo2 - ficha formativa nº5
Arquitetura de Computadores: Sistemas de numeração
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
Pcs2031 projeto01 introducao_pic_v4
Imei módulo2 - ficha formativa nº4
Anúncio

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

PDF
Operações com Bits
PDF
Cartao referencia ccs
PDF
Aula 2 - Prática - Familiarização com o kit de desenvolvimento e com a IDE.pdf
PDF
Lab2 vhdl fluxo_quartus
PDF
Introdução-à-Programação-Embarcada-com-Arduino.pdf
PDF
Introdução à Linguagem de Programação C
PDF
Webinar: Porque o RTOS não faz o que eu quero?
PDF
38698469 slides-arduino
PDF
Introdução ao Arduino
PDF
Apostila - Tutorial Arduino (Básico).PDF
PDF
Desenvolvimento de drivers para sistemas embarcados
PDF
Acessando os periféricos de um microcontrolador
PPT
Intro Sist Embarcados - Sergio cavalcante
PPT
Intro Sist Embarcados.p para voce estudar
PDF
Linguagem c wellington telles - aula 02
PDF
Linguagem C - Introdução com conceitos da Linguagem C
PDF
Programação em Linguagem C - xlinguagem-c-em-uma-aula.pdf
PDF
C e assembly x86 64 v0.33.9
PDF
3b5d17 748a8b99e224a1bf91f42123e5388634
Operações com Bits
Cartao referencia ccs
Aula 2 - Prática - Familiarização com o kit de desenvolvimento e com a IDE.pdf
Lab2 vhdl fluxo_quartus
Introdução-à-Programação-Embarcada-com-Arduino.pdf
Introdução à Linguagem de Programação C
Webinar: Porque o RTOS não faz o que eu quero?
38698469 slides-arduino
Introdução ao Arduino
Apostila - Tutorial Arduino (Básico).PDF
Desenvolvimento de drivers para sistemas embarcados
Acessando os periféricos de um microcontrolador
Intro Sist Embarcados - Sergio cavalcante
Intro Sist Embarcados.p para voce estudar
Linguagem c wellington telles - aula 02
Linguagem C - Introdução com conceitos da Linguagem C
Programação em Linguagem C - xlinguagem-c-em-uma-aula.pdf
C e assembly x86 64 v0.33.9
3b5d17 748a8b99e224a1bf91f42123e5388634
Anúncio

Mais de Rodrigo Almeida (20)

PPTX
Embedded systems design @ defcon 2015
PDF
Embedded systems development Defcon 19
PDF
As diferentes engenharias
PDF
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
PDF
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
PDF
Cryptology - Antônio Lacerda
PDF
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
PDF
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
PDF
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
PDF
Projeto de uma controladora de drivers
PDF
Kernel com requisitos temporais
PDF
Kernel cooperativo
PDF
Definição de processos
PDF
Ponteiros de Função
PDF
Conceitos de ponteiros struct e buffers
PDF
Introdução aos sistemas operacionais embarcados
PDF
Segurança de sistemas: invasões, engenharia reversa e análise de virus
PDF
Comunicação serial
PDF
Utilizando um Display de LCD
PDF
Leitura de teclas com arranjo matricial
Embedded systems design @ defcon 2015
Embedded systems development Defcon 19
As diferentes engenharias
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Cryptology - Antônio Lacerda
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...
Projeto de uma controladora de drivers
Kernel com requisitos temporais
Kernel cooperativo
Definição de processos
Ponteiros de Função
Conceitos de ponteiros struct e buffers
Introdução aos sistemas operacionais embarcados
Segurança de sistemas: invasões, engenharia reversa e análise de virus
Comunicação serial
Utilizando um Display de LCD
Leitura de teclas com arranjo matricial

Último (19)

PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Aula 18 - Manipulacao De Arquivos python
Custos e liquidação no SAP Transportation Management, TM130 Col18
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Aula04-Academia Heri- Tecnologia Geral 2025
COBITxITIL-Entenda as diferença em uso governança TI
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Processos na gestão de transportes, TM100 Col18
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Apple Pippin Uma breve introdução. - David Glotz
Otimizador de planejamento e execução no SAP Transportation Management, TM120...

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