Sei sulla pagina 1di 24

Programao de sistemas embarcados: Introduo

Prof. Rodrigo Maximiano Antunes de Almeida


Universidade Federal de Itajub

rodrigomax@unifei.edu.br

ELT024

Programao de sistemas embarcados: Introduo

Dados Importantes
Terica: Local Sala X.1.1.03 Horrio 15:45-17:35 Laboratrio: Local Sala LEC I Horrio P1: 8:00-9:45, P2-10:15-12:00 Levar a placa + adaptador de tomada Datas Importantes *: Prova 01 25/09 Prova 02 11/12 Sub 18/12

* Datas
Todas as datas esto sujeitas a alteraes

ELT024

Programao de sistemas embarcados: Introduo

Referncias Bibliogrcas
Notas de Aula de Programao de Sistemas Embarcados

(ELT024) Almeida, Rodrigo M.A., Unifei 2012*


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. 3a Edio. 1997. The art of Programming Embedded Systems, Ganssle, J. Academic Press, 1991 *Erros na apostila
Cada erro vale 1 (um) ponto na mdia, 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 nmero de matrcula do aluno.

Ser considerado apenas o primeiro e-mail.


ELT024 Programao de sistemas embarcados: Introduo

Sistemas Embarcados

ELT024

Programao de sistemas embarcados: Introduo

Tpicos da Disciplina

Linguagem C Hardware utilizado Ambiente de programao Programao em C para sistemas embarcados Indentao e padro de escrita Comentrios Arquivos .c e .h Diretivas de compilao

ELT024

Programao de sistemas embarcados: Introduo

Introduo
Linguagem C

Lgica de Programao
necessria para as pessoas que desejam trabalhar com

desenvolvimento de programas e sistemas


permite denir uma sequncia natural de atividades com a

inteno de atingir um objetivo Lgica de Programao a tcnica de encadear pensamentos em uma sequncia lgica para atingir um determinado objetivo.

ELT024

Programao de sistemas embarcados: Introduo

Introduo
Linguagem C

Aplicao Sistema Operacional Firmware Hardware

ELT024

Programao de sistemas embarcados: Introduo

Introduo
Linguagem C

Fonte: http://www.embedded.com/design/218600142
ELT024 Programao de sistemas embarcados: Introduo

Introduo
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 resistncia de aquecimento ligada uma sada PWM 1 buzzer ligada uma sada PWM 1 motor DC tipo ventilador uma sada PWM 1 canal de comunicao serial padro RS-232

ELT024

Programao de sistemas embarcados: Introduo

Introduo
Ambiente de Programao

Ferramentas a serem utilizadas:


IDE: MPLAB 8.86 - Proprietrio 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 instalao exige certos cuidados. Referenciem pela apostila.

ELT024

Programao de sistemas embarcados: Introduo

Linguagem C
Indentao e padro de escrita

O estilo adotado conhecido como estilo Allman, bsd (no

emacs) ou ANSI.
Todos os documentos do padro ANSI C utilizam este estilo. Apesar disto o padro ANSI C no especica um estilo para

ser usado. Ateno Detalhes no so importantes. A coerncia dentro do projeto sim.

ELT024

Programao de sistemas embarcados: Introduo

Linguagem C
Comentrios

Comentrios so textos no meio do programa fonte com a

inteno de explicar ou esclarecer um trecho do cdigo


1 2 3 4 5 6 7 8 9

#include <stdio.h> #define DIST 260 // distncia entre SP e Ita int main(int argc, char* argv[]) { /* esse programa serve para mostrar como se insere comentrios */ printf ("So Paulo est %d Km de Itajub", return 0; }

DIST);

ELT024

Programao de sistemas embarcados: Introduo

Linguagem C
Arquivos .c e .h

Arquivo de cdigo (code) terminado com a extenso .c contm a implementao do cdigo compilado gerando um arquivo .o Arquivo de cabealho (header) terminado com a extenso .h contm apenas denes e prottipos no compilado

ELT024

Programao de sistemas embarcados: Introduo

Linguagem C
Arquivos .c e .h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

//varivel usada apenas dentro deste arquivo static char temp; //varivel que ser usada tambm fora do arquivo static char valor; //funes usadas dentro e fora do arquivo void MudaDigito(char val) { valor = val; } char LerDigito(void) { return valor; } void InicializaDisplays(void) { //cdigo da funo } //funo usada apenas dentro deste arquivo void AtualizaDisplay(void) { //cdigo da funo }
ELT024 Programao de sistemas embarcados: Introduo

Linguagem C
Arquivos .c e .h

1 2 3 4 5 6

#ifndef VAR_H #define VAR_H void MudaDigito(char val); char LerDigito(void); void InicializaDisplays(void); #endif //VAR_H

Ateno
No existe a funo AtualizaDisplay() A varivel digito s pode ser lida ou gravada pelas funes

MudarDigito() e LerDigito()
Cuidado com o overhead de funes

ELT024

Programao de sistemas embarcados: Introduo

Linguagem C
Diretivas de compilao

ELT024

Programao de sistemas embarcados: Introduo

Linguagem C
Diretivas de compilao

As diretivas de compilao so instrues dadas ao compilador. Elas no so executadas. As diretivas de compilao comeam com um sinal #,

conhecido como jogo da velha ou hash.

ELT024

Programao de sistemas embarcados: Introduo

Linguagem C
#dene

A diretiva #dene utilizada para que o cdigo fonte seja modicado antes de ser compilado.
1 2 3 4 5 6 7 8 9 10 11 12 13

#define CONST 15 void main(void) { printf("%d", CONST * 3); } //depois de compilado void main(void) { printf("%d", 15 * 3); // possvel: printf("%d", 45); }

ELT024

Programao de sistemas embarcados: Introduo

Linguagem C
#dene
Funo Original
1 2 3 4 5 6 7 8 9

Opes de uso com o #dene

Resultado na Tela

void MostraSaidaPadrao() { #ifdef PADRAO Serial char * msg = "SERIAL"; #else char * msg = "LCD"; #endif printf(msg); }

1 2 3 4 5 6

#include <stdio.h> #define PADRAO Serial void main(void) { MostraSaidaPadrao(); }

SERIAL

1 2 3 4 5 6

#include <stdio.h> #define PADRAO LCD void main(void) { MostraSaidaPadrao(); }

LCD

ELT024

Programao de sistemas embarcados: Introduo

Linguagem C
#ifdef, #ifndef, #else e #endif
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

void ImprimirTemp(char valor) { #ifdef LCD Imprime_LCD(valor) #else if (valor > 30) { led = 1; } else { led = 0; } #endif //LCD }

Funcionamento
No momento da compilao 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 Programao de sistemas embarcados: Introduo

Linguagem C
Referncia circular

A funo LerTemperatura() faz um teste: se o valor for maior que um patamar chama a funo EnviaSerial() com o cdigo 0x30.
1 2 3

#include "serial.h" char LerTemperatura(void); void AjustaCalor(char val);

A funo LerSerial() recebe um valor e repassa para a funo AjustaCalor().


1 2 3

#include "temp.h" char LerSerial(void); void EnviaSerial(char val);

ELT024

Programao de sistemas embarcados: Introduo

Linguagem C
Referncia circular

temp.h
#include serial.h char LerTemperatura(void); void AjustaCalor(char val);

serial.h
#include temp.h

temp.h
#include serial.h char LerTemperatura(void); void AjustaCalor(char val);

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

ELT024

Programao de sistemas embarcados: Introduo

Linguagem C
Referncia circular

Soluo: criar uma estrutura de controle para pr compilao.


1 2 3 4 5

#ifndef TAG_CONTROLE #define TAG_CONTROLE //todo o contedo do arquivo vem aqui. #endif //TAG_CONTROLE

ELT024

Programao de sistemas embarcados: Introduo

Linguagem C
Referncia circular

Soluo: criar uma estrutura de controle para pr compilao.


temp.h
#infdef TEMP_H #define TEMP_H #include serial.h char LerTemperatura(void); void AjustaCalor(char val); #endif

serial.h
#infdef SERIAL_H #define SERIAL_H #include temp.h char LerSerial(void); void EnviaSerial(char val); #endif

temp.h
#infdef TEMP_H //tag j definida, //pula o contedo #endif

ELT024

Programao de sistemas embarcados: Introduo

Potrebbero piacerti anche