Introdução à programação embarcada

  • Published on
    24-Jun-2015

  • View
    2.675

  • Download
    39

Embed Size (px)

DESCRIPTION

Primeira aula: Linguagem C, Hardware utilizado, Ambiente de programao, Indentao e padro de escrita, Comentrios, Arquivos .c e .h, Diretivas de compilao

Transcript

<ul><li> 1. Programao de sistemas embarcados: Introduo Prof. Rodrigo Maximiano Antunes de Almeida Universidade Federal de Itajub rodrigomax@unifei.edu.br ELT024 Programao de sistemas embarcados: Introduorodrigomax@unifei.edu.br 1 / 25 </li></ul> <p> 2. Dados Importantes Terica: Local Sala I.2.1.11 Horrio 15:45-17:35 (ter) Laboratrio: Local Sala LEC I Horrio 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 esto sujeitas a alteraes ELT024 Programao de sistemas embarcados: Introduorodrigomax@unifei.edu.br 2 / 25 3. Referncias Bibliogrcas Notas de Aula de Programao 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 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: Introduorodrigomax@unifei.edu.br 3 / 25 4. Sistemas Embarcados ELT024 Programao de sistemas embarcados: Introduorodrigomax@unifei.edu.br 4 / 25 5. 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: Introduorodrigomax@unifei.edu.br 5 / 25 6. 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: Introduorodrigomax@unifei.edu.br 6 / 25 7. Introduo Linguagem C Firmware Hardware Sistema Operacional Aplicao ELT024 Programao de sistemas embarcados: Introduorodrigomax@unifei.edu.br 7 / 25 8. Introduo Linguagem C Fonte: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html ELT024 Programao de sistemas embarcados: Introduorodrigomax@unifei.edu.br 8 / 25 9. Introduo Linguagem C Fonte: http://www.embedded.com/design/218600142 ELT024 Programao de sistemas embarcados: Introduorodrigomax@unifei.edu.br 9 / 25 10. 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: Introduorodrigomax@unifei.edu.br 10 / 25 11. Introduo Ambiente de Programao Ferramentas a serem utilizadas: IDE: MPLAB 8.92 - 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: Introduorodrigomax@unifei.edu.br 11 / 25 12. 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: Introduorodrigomax@unifei.edu.br 12 / 25 13. Linguagem C Comentrios Comentrios so textos no meio do programa fonte com a inteno de explicar ou esclarecer um trecho do cdigo 1 #includes 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 comentrios */ 7 printf ( So Paulo est %d Km de Itajub , DIST ) ; 8 return 0 ; 9 } ELT024 Programao de sistemas embarcados: Introduorodrigomax@unifei.edu.br 13 / 25 14. 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: Introduorodrigomax@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 tambm f o r a do arquivo 4 static char valor ; 5 // funes 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 // cdigo da funo 14 } 15 // funo usada apenas dentro deste arquivo 16 void AtualizaDisplay ( void) { 17 // cdigo da funo 18 } ELT024 Programao de sistemas embarcados: Introduorodrigomax@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 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: Introduorodrigomax@unifei.edu.br 16 / 25 17. Linguagem C Diretivas de compilao ELT024 Programao de sistemas embarcados: Introduorodrigomax@unifei.edu.br 17 / 25 18. 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: Introduorodrigomax@unifei.edu.br 18 / 25 19. Linguagem C #dene A diretiva #dene utilizada para que o cdigo 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 Programao de sistemas embarcados: Introduorodrigomax@unifei.edu.br 19 / 25 20. Linguagem C #dene Funo Original Opes 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 #includes t d i o . h 2 #define PADRAO S e r i a l 3 void main ( void) 4 { 5 MostraSaidaPadrao ( ) ; 6 } SERIAL 1 #includes t d i o . h 2 #define PADRAO LCD 3 void main ( void) 4 { 5 MostraSaidaPadrao ( ) ; 6 } LCD ELT024 Programao de sistemas embarcados: Introduorodrigomax@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 ( valor3 0 ) { 6 led = 1 ; 7 } else{ 8 led = 0 ; 9 } 10 #endif //LCD 11 } 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: Introduorodrigomax@unifei.edu.br 21 / 25 22. 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 #include serial.h 2 char LerTemperatura ( void) ; 3 void AjustaCalor ( char val ) ; A funo LerSerial() recebe um valor e repassa para a funo AjustaCalor(). 1 #include temp.h 2 char LerSerial ( void) ; 3 void EnviaSerial ( char val ) ; ELT024 Programao de sistemas embarcados: Introduorodrigomax@unifei.edu.br 22 / 25 23. Linguagem C Referncia 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 Programao de sistemas embarcados: Introduorodrigomax@unifei.edu.br 23 / 25 24. Linguagem C Referncia circular Soluo: criar uma estrutura de controle para pr compilao. 1 #ifndef TAG_CONTROLE 2 #define TAG_CONTROLE 3 // todo o contedo do arquivo vem aqui . 5 #endif //TAG_CONTROLE ELT024 Programao de sistemas embarcados: Introduorodrigomax@unifei.edu.br 24 / 25 25. Linguagem C Referncia circular Soluo: criar uma estrutura de controle para pr compilao. #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 contedo #endif temp.h ELT024 Programao de sistemas embarcados: Introduorodrigomax@unifei.edu.br 25 / 25 </p>

Recommended

View more >