Your SlideShare is downloading. ×
Revisão de linguagem C para Sistemas Embarcados
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Revisão de linguagem C para Sistemas Embarcados

2,940
views

Published on

Segunda aula: tipos de dados em linguagem C, Operações aritméticas, Função main(), Rotinas de tempo

Segunda aula: tipos de dados em linguagem C, Operações aritméticas, Função main(), Rotinas de tempo

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,940
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
80
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Tipos de dados, função main e tempo Prof. Rodrigo Maximiano Antunes de Almeida Universidade Federal de Itajubá rodrigomax@unifei.edu.br ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 1 / 48
  • 2. Teclado Revisão ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 2 / 48
  • 3. Dados Importantes Teórica: Local ⇒ Sala I.2.1.11 Horário ⇒ 15:45-17:35 (ter) Laboratório: Local ⇒ Sala LEC I / LASER Horário ⇒ P1: 8:00-9:45 (qui) ELT025 (LASER) P2: 10:15-12:00 (qui) ELT025 (LASER) P3: 15:50-17:30 (qui) ELT025 (LECI) P1: 13:30-15:10 (ter) ELT802 (LECI) Levar a placa + adaptador de tomada Datas Importantes *: Prova 01 ⇒ 17/09 Prova 02 ⇒ 26/11 Sub ⇒ 03/12 * Datas Todas as datas estão sujeitas a alterações ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 3 / 48
  • 4. Linguagem C Referência circular (rev) 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() receber um valor e repassa para a função AjustaCalor(). 1 #include "temp.h" 2 char LerSerial ( void ) ; 3 void EnviaSerial ( char val ) ; ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 4 / 48
  • 5. Linguagem C Referência circular (rev) #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 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 5 / 48
  • 6. Linguagem C Referência circular (rev) Solução: criar uma estrutura de controle para pré compilação. 1 #ifndef TAG_CONTROLE 2 #define TAG_CONTROLE 3 // t o d o o c o n t e ú d o do a r q u i v o vem a q u i . 5 #endif //TAG_CONTROLE ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 6 / 48
  • 7. Linguagem C Referência circular(rev) #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 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 7 / 48
  • 8. Linguagem C Tipos de dados em C Tipos de dados em C ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 8 / 48
  • 9. Linguagem C Conversão Binário, Decimal, Hexadecimal Toda informação que é inserida num computador é armazenada em formato binário Cada tipo de informação contém uma quantidade diferente de bits Cada bit pode representar informações diferentes, mesmo dentro de uma mesma variável ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 9 / 48
  • 10. Linguagem C Tipos de dados em C Tipo Bits Bytes Faixa de valores char 8 1 -128 à 127 int 16 2 -32.768 à 32.767 oat 32 4 3,4 x 10-38 à 3,4 x 1038 double 64 8 3,4 x 10-308 à 3,4 x 10308 ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 10 / 48
  • 11. Linguagem C Conversão Binário, Decimal, Hexadecimal Quando resolvemos codicar uma informação num formato digital, e portanto nito, sempre existe perda de informação resolução amplitude ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 11 / 48
  • 12. Linguagem C Conversão Binário, Decimal, Hexadecimal Exemplos: 1 f l o a t x = 0 ; 2 while ( x != 4 ) 3 { 4 printf ( i ) ; 5 x += 0 . 4 f ; 6 } 1 char x = 0 ; 2 while ( x 2 0 0 ) 3 { 4 printf ( i ) ; 5 x++; 6 } ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 12 / 48
  • 13. Linguagem C Conversão Binário, Decimal, Hexadecimal Conversão Binário-decimal Dividir o número por 2 Anotar o valor do resto (0 ou 1) Se o valor é maior que 0 voltar ao número 1 Escrever os valores obtidos através do passo 2 de trás para frente. Apresentar o resultado ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 13 / 48
  • 14. Linguagem C Conversão Binário, Decimal, Hexadecimal Exercicio 01) Converter os números 18 513 73 60 -15 ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 14 / 48
  • 15. Linguagem C Conversão Binário, Decimal, Hexadecimal Número 18: 18 2 = 9, resto 0 9 2 = 4, resto 1 4 2 = 2, resto 0 2 2 = 1, resto 0 1 2 = 0, resto 1 ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 15 / 48
  • 16. Linguagem C Conversão Binário, Decimal, Hexadecimal A representação de números negativos é feita através do MSB 0 = positivo 1 = negativo Método de conversão: complemento de dois ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 16 / 48
  • 17. Linguagem C Conversão Binário, Decimal, Hexadecimal Complemento de dois Denir tamanho da palavra Achar o representação em binário positiva com a mesma magnitude Inverter todos os bits Somar um ao resultado ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 17 / 48
  • 18. Linguagem C Conversão Binário, Decimal, Hexadecimal Números fracionários (ponto utuante) São divididos em expoente, mantissa e sinal Sinal ocupa apenas um bit, como nos inteiros A mantissa representa os algarismos signicativos O expoente representa a magnitude Ponto xo ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 18 / 48
  • 19. Linguagem C Conversão Binário, Decimal, Hexadecimal Base Hexadecimal Possui 16 unidadesdiferentes. 10 algarismos mais 6 letras Facilita escrita de valores binários Fácil conversão bin-hex ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 19 / 48
  • 20. Linguagem C Conversão Binário, Decimal, Hexadecimal Dec Bin Hex Dec Bin Hex 0 0000 0 8 1000 8 1 0001 1 9 1001 9 2 0010 2 10 1010 A 3 0011 3 11 1011 B 4 0100 4 12 1100 C 5 0101 5 13 1101 D 6 0110 6 14 1110 E 7 0111 7 15 1111 F ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 20 / 48
  • 21. Linguagem C Conversão Binário, Decimal, Hexadecimal Exercicio 02) Converter os números 1810 - 100102 51310 - 10000000012 7310 - 10010012 6010 - 1111002 -1510 - 11110012_8bits ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 21 / 48
  • 22. Linguagem C Conversão Binário, Decimal, Hexadecimal Exercicio 02) Converter os números como: 1810= 1-00102 12 = 116 00102 = 216 logo : 100102. = 1216. ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 22 / 48
  • 23. Linguagem C Modicadores de tamanho e sinal Modicadores de tamanho e sinal ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 23 / 48
  • 24. Linguagem C Modicadores de tamanho e sinal Tipo Bytes Excursão máxima unsigned char 1 0 à 255 signed char 1 -128 à 127 unsigned int 2 0 à 65.535 signed int 2 -32.768 à 32.767 long int 4 -2.147.483.648 à 2.147.483.647 unsigned long int 4 0 à 4.294.967.295 short int 2 -32.768 à 32.767 ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 24 / 48
  • 25. Linguagem C Modicadores de Acesso Modicadores de Acesso ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 25 / 48
  • 26. Linguagem C Modicadores de Acesso 1 #define X ( *( near unsigned char *) 0 xF83 ) 2 void main ( void ) 3 { 4 while ( X!=X ) ; 5 } ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 26 / 48
  • 27. Linguagem C Modicadores de Acesso Compilando o código anterior temos em assembler: 1 // S t a r t i n g pCode b l o c k 2 S_Teste__main code 3 _main : 4 . line 19 // T e s t e . c w h i l e (X!=X) ; 6 RETURN ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 27 / 48
  • 28. Linguagem C Modicadores de Acesso 1 #define X ( *( v o l a t i l e near unsigned char *) 0 xF83 ) 2 void main ( void ) 3 { 4 while ( X!=X ) ; 5 } ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 28 / 48
  • 29. Linguagem C Modicadores de Acesso 1 S_Teste__main code // S t a r t i n g pCode b l o c k 2 _main : 3 _00105_DS_ : 4 . line 19 // T e s t e . c w h i l e (X != X) ; 5 MOVLW 0 x83 // p r i m e i r a p a r t e do e n d e r e ç o 6 MOVWF r0x00 7 MOVLW 0 x0f // s e g u n d a p a r t e do e n d e r e ç o 8 MOVWF r0x01 9 MOVFF r0x00 , FSR0L 10 MOVFF r0x01 , FSR0H 11 MOVFF INDF0 , r0x00 // r e a l i z a p r i m e i r a l e i t u r a 12 MOVLW 0 x83 // p r i m e i r a p a r t e do e n d e r e ç o 13 MOVWF r0x01 14 MOVLW 0 x0f // s e g u n d a p a r t e do e n d e r e ç o 15 MOVWF r0x02 16 MOVFF r0x01 , FSR0L 17 MOVFF r0x02 , FSR0H 18 MOVFF INDF0 , r0x01 // r e a l i z a s e g u n d a l e i t u r a 19 MOVF r0x00 , W 20 XORWF r0x01 , W 21 BNZ _00105_DS_ // f a z o t e s t e p a r a i g u a l d a d e 22 RETURN ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 29 / 48
  • 30. Linguagem C Modicadores de Acesso Utilização de const: 1 #define X ( *( v o l a t i l e const near unsigned char *) 0 xF83 ) 2 // i n i c i o do programa 3 void main ( void ) 4 { 5 X = 3 ; 6 } A compilação resulta em erro: 1 Teste . c : error 3 3 : Attempt to assign value to a constant ← variable (=) ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 30 / 48
  • 31. Linguagem C Modicadores de Posicionamento Modicadores de Posicionamento ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 31 / 48
  • 32. Linguagem C Modicadores de Posicionamento Existem dois modicadores de posicionamento near far Não são padronizadas pela ISO C(99) Indicam ao compilador a região em que a variável deve ser colocada near - região de acesso mais rápido far - região de acesso normal ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 32 / 48
  • 33. Linguagem C Modicador de persistência Modicador de persistência ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 33 / 48
  • 34. Linguagem C Modicador de persistência A persistência de uma variável pode ser assegurada com o modicador static Padronizada pela ISO C(99) Garante que não haverá perda de informação na variável Uma região de memória é reservada apenas para a variável em questão 1 // c r i a um c o n t a d o r p e r s i s t e n t e que é 2 // i n c r e m e n t a d o a ca d a chamada de f u n ç ã o 3 i n t ContadorPersistente ( i n t reseta ) { 4 char variavel_persistente ; 5 i f ( reseta ) { variavel_persistente = 0 ; } 6 else { return ( variavel_persistente++) ; } 7 return −1; 8 } ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 34 / 48
  • 35. Linguagem C Modicador de persistência 1 // c r i a um c o n t a d o r p e r s i s t e n t e que é 2 // i n c r e m e n t a d o a ca d a chamada de f u n ç ã o 3 i n t ContadorPersistente ( i n t reseta ) 4 { 5 s t a t i c char variavel_persistente ; 6 i f ( reseta ) 7 { 8 variavel_persistente = 0 ; 9 } 10 else 11 { 12 return ( variavel_persistente++) ; 13 } 14 return −1; 15 } ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 35 / 48
  • 36. Linguagem C Operações Aritiméticas Operações Aritiméticas ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 36 / 48
  • 37. Linguagem C Operações Aritiméticas 1 void main ( void ) 2 { 3 char var8 ; 4 i n t var16 ; 5 long i n t var32 ; 6 f l o a t pont16 ; 7 double pont32 ; 8 var8 = var8 + var16 ; // 1 9 var8 = var8 + var8 ; // 2 10 var16 = var8 * var8 ; // 3 11 var32 = var32 / var16 ; // 4 12 var32 = pont32 * var32 ; // 5 13 pont16 = var8 / var16 ; // 6 14 pont16 = pont32 * var32 ; // 7 15 pont16 = 40 / 8 0 ; // 8 16 } ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 37 / 48
  • 38. Linguagem C Função main() Função main() ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 38 / 48
  • 39. Linguagem C Função main() 0x58 Testa A 0x57 30 0x56 A recebe 0x55 Limpa A 0x59 ... 0x8D Porta B 0x8C Salva em 0x8B 50 0x8A A recebe 0x8E ... 0x03 0x55 0x02 Pulo 0x01 0x8A 0x04 ... 0x00 Pulo Endereço Instrução ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 39 / 48
  • 40. Linguagem C Função main() O como indicar o ponto de início de um programa depende do compilador. Geralmente apenas a criação da função main já é suciente para o compilador O linker aloca a função main() em algum lugar disponível na memória O linker atualiza o vetor de reset colocando um pulo para a função main 1 void main ( void ) 2 { 3 // a q u i e n t r a o c ó d i g o do programa 4 } ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 40 / 48
  • 41. Linguagem C Função main() Atenção! Para sistemas embarcados a função main é a primeira a ser executada, portanto não pode receber parâmetro nenhum. Como ela é a ultima a ser executada, também não existe a possibilidade de retornar algum valor. Deve ser declarada como: 1 void main ( void ) 2 { 3 // I n s i r a o c ó d i g o a q u i . 4 } ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 41 / 48
  • 42. Linguagem C Função main() Geralmente os sistemas embarcados são feitos para serem continuamente executados As rotinas devem ser cíclicas O sistema só para quando desligado Atenção! Nesta situação utiliza-se loops innitos. ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 42 / 48
  • 43. Linguagem C Função main() 1 void main ( void ) 2{ 3 for ( ; ; ) 4 { 5 // a q u i e n t r a o 6 // c ó d i g o p r i n c i p a l 7 } 8} 1 void main ( void ) 2{ 3 while ( 1 ) 4 { 5 // a q u i e n t r a o 6 // c ó d i g o p r i n c i p a l 7 } 8} ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 43 / 48
  • 44. Linguagem C Rotinas de Tempo Rotinas de Tempo ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 44 / 48
  • 45. Linguagem C Rotinas de Tempo É muito comum necessitar que o microcontrolador que um tempo sem fazer nada. Uma maneira de atingir esse objetivo é utilizar um laço for. 1 unsigned char i ; 2 for ( i=0; i 1 0 ; i++) ; Atenção! Notar que não estamos utilizando os colchetes. ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 45 / 48
  • 46. Linguagem C Rotinas de Tempo 1 // c ó d i g o em a s s e m b l e r e q u i v a l e n t e do : f o r ( i =0; i 10; i ++) ; 2 MOVF r0x00 , W // i n i c i a l i z a W com 0 ← ( 1 c i c l o ) 3 SUBLW 0 x0a // c o l o c a o v a l o r 10 ( 0 x0a ) no r e g i s t r o W ← ( 1 c i c l o ) 4 MOVWF r0x00 //muda o v a l o r de W p a r a F ← ( 1 c i c l o ) 5 _00107_DS_ : 6 DECFSZ r0x00 , F // d e c r e m e n t a F , s e F0 e x e c u t a o p r ó x i m o ← ( 1 c i c l o ) 7 BRA _00107_DS_ // p u l a p a r a o l u g a r _00107_DS_ ← ( 2 c i c l o s ) ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 46 / 48
  • 47. Linguagem C Rotinas de Tempo São gastos 3 passos para inicialização, cada um de 1 ciclo. Cada iteração gasta 2 passos, um de 1 ciclo e um de 2 ciclos Para um PIC a 8 MHz cada ciclo gasta 0,5 us Se desejamos um tempo de x segundos são necessárias 2 ∗ 109 ∗ x instruções. ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 47 / 48
  • 48. Linguagem C Rotinas de Tempo 1 unsigned char i , j , l ; 2 for ( i=0; i 3 4 ; i++) // 3+34*(30 ,003+3) = 1 , 0 2 0 , 2 0 7 i n s t r u ç õ e s 3 { 4 for ( j=0; j 1 0 0 ; j++) // 3+100*(297 + 3 ) = 3 0 , 0 0 3 i n s t r u ç õ e s 5 { 6 for ( k=0; k 9 8 ; k++) ; // 3+98*(3) = 297 i n s t r u ç õ e s 7 } 8 } ELT024 Tipos de dados, função main e tempo rodrigomax@unifei.edu.br 48 / 48

×