• Nenhum resultado encontrado

elt024-02-tiposdedados

N/A
N/A
Protected

Academic year: 2021

Share "elt024-02-tiposdedados"

Copied!
46
0
0

Texto

(1)

Tipos de dados, fun¸c˜

ao main() e rotinas de tempo

Rodrigo Almeida

Universidade Federal de Itajub´a

rodrigomax@unifei.edu.br

(2)
(3)

Revis˜ao

Dados Importantes

Te´orica:

Local ⇒ Sala I.2.1.11 Hor´ario ⇒ 4T12

Laborat´orio (ELTP14):

Local ⇒ Sala LEC II Hor´ario ⇒ P1: 5T12 P2: 5T34 P3: 6T12 P4: 6T34 Datas Importantes *: Prova 01 ⇒ 05/04 Prova 02 ⇒ 21/06 Sub ⇒ 05/07 * Datas

Todas as datas est˜ao sujeitas a altera¸c˜oes

(4)

A fun¸c˜ao LerTemperatura() faz um teste: se o valor for maior que um patamar chama a fun¸c˜ao EnviaSerial() com o c´odigo 0x30.

1 # i n c l u d e " s e r i a l . h "

2 c h a r L e r T e m p e r a t u r a (v o i d) ; 3 v o i d A j u s t a C a l o r (c h a r val ) ;

A fun¸c˜ao LerSerial() recebe um valor e repassa para a fun¸c˜ao AjustaCalor().

1 # i n c l u d e " t e m p . h " 2 c h a r L e r S e r i a l (v o i d) ; 3 v o i d E n v i a S e r i a l (c h a r val ) ;

(5)

Revis˜ao

Referˆ

encia 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

(6)

Solu¸c˜ao: criar uma estrutura de controle para pr´e compila¸c˜ao. 1 #i f n d e f T A G _ C O N T R O L E 2 #d e f i n e T A G _ C O N T R O L E 3 // t o d o o c o n t e ´u d o do a r q u i v o v e m a q u i . 4 5 #e n d i f // T A G C O N T R O L E

(7)

Revis˜ao

Referˆ

encia circular (rev)

#ifndef TEMP_H #define TEMP_H #include “serial.h” char LerTemperatura(void); void AjustaCalor(char val); #endif temp.h #ifndef SERIAL_H #define SERIAL_H #include “temp.h” char LerSerial(void); void EnviaSerial(char val); #endif serial.h #ifndef TEMP_H //tag já definida, //pula o conteúdo #endif temp.h

(8)
(9)

Tipos de dados em C

Tipos de dados em C

Toda informa¸c˜ao que ´e inserida num computador ´e armazenada em formato bin´ario;

Cada tipo de informa¸c˜ao cont´em uma quantidade diferente de bits; Cada bit pode representar informa¸c˜oes diferentes, mesmo dentro de uma mesma vari´avel.

(10)

Tipo Bits Bytes Faixa de valores char 8 1 -128 `a 127 int 16 2 -32.768 `a 32.767 float 32 4 3,4 x 10-38 `a 3,4 x 1038 double 64 8 3,4 x 10-308`a 3,4 x 10308 Dependendo....

(11)

Tipos de dados em C

Convers˜

ao Bin´

ario, Decimal, Hexadecimal

Quando resolvemos codificar uma informa¸c˜ao num formato digital, e

portanto finito, sempre existe perda de

informa¸c˜ao resolu¸c˜ao amplitude

(12)

Calcule quantas itera¸c˜oes possui cada loop: 1 f l o a t x = 0; 2 3 w h i l e ( x != 4) { 4 x += 0.4f; 5 } 1 c h a r x = 0; 2 3 w h i l e ( x < 200) { 4 x ++; 5 }

(13)

Tipos de dados em C

Convers˜

ao Bin´

ario, Decimal, Hexadecimal

Convers˜ao Bin´ario-decimal

Dividir o n´umero por 2

Anotar o valor do resto (0 ou 1)

Se o valor ´e maior que 0 voltar ao n´umero 1

Escrever os valores obtidos atrav´es do passo 2 de tr´as para frente. Apresentar o resultado

(14)

Exercicio 01) Converter os n´umeros 18 513 73 60 -15

(15)

Tipos de dados em C

Convers˜

ao Bin´

ario, Decimal, Hexadecimal

N´umero 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

(16)

A representa¸c˜ao de n´umeros negativos ´e feita atrav´es do MSB

0 = positivo 1 = negativo

(17)

Tipos de dados em C

Convers˜

ao Bin´

ario, Decimal, Hexadecimal

Complemento de dois

Definir tamanho da palavra

Achar a representa¸c˜ao em bin´ario positiva com a mesma magnitude Inverter todos os bits

Somar um ao resultado

(18)

N´umeros fracion´arios (ponto flutuante)

S˜ao divididos em expoente, mantissa e sinal Sinal ocupa apenas um bit, como nos inteiros A mantissa representa os algarismos significativos O expoente representa a magnitude

(19)

Tipos de dados em C

Convers˜

ao Bin´

ario, Decimal, Hexadecimal

Base Hexadecimal

Possui 16 “unidades”diferentes. 10 algarismos mais 6 letras Facilita escrita de valores bin´arios F´acil convers˜ao bin-hex

(20)

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

(21)

Tipos de dados em C

Convers˜

ao Bin´

ario, Decimal, Hexadecimal

Exercicio 02) Converter os n´umeros

1810 - 100102

51310 - 10000000012

7310 - 10010012

6010 - 1111002

-1510 - 111100012 8bits

(22)

Exercicio 02) Converter os n´umeros como: 1810= 1-00102 12 = 116 00102= 216 logo : 100102. = 1216.

(23)

Modificadores de vari´aveis

Modificadores de vari´

aveis

(24)

Tipo Bytes Excurs˜ao m´axima unsigned char 1 0 `a 255 signed char 1 -128 `a 127 unsigned int 2 0 `a 65.535 signed int 2 -32.768 `a 32.767 long int 4 -2.147.483.648 `a 2.147.483.647

unsigned long int 4 0 `a 4.294.967.295

(25)

Modificadores de vari´aveis

Modificadores de Acesso

1 # d e f i n e X (*(n e a r u n s i g n e d c h a r*) 0 x F 8 3 ) 2 v o i d m a i n (v o i d) { 3 w h i l e ( X != X ) ; 4 }

(26)

Compilando o c´odigo anterior temos em assembly: 1 // S t a r t i n g p C o d e b l o c k 2 S _ T e s t e _ _ m a i n c o d e 3 _ m a i n : 4 . l i n e 19 // T e s t e . c w h i l e ( X != X ) ; 5 6 R E T U R N

(27)

Modificadores de vari´aveis

Modificadores de Acesso

1 #d e f i n e X (*(v o l a t i l e n e a r u n s i g n e d c h a r*)0 x F 8 3) 2 v o i d m a i n (v o i d) 3 { 4 w h i l e ( X != X ) ; 5 }

(28)

3 _ 0 0 1 0 5 _ D S _: 4 . l i n e 19 // T e s t e . c w h i l e ( X != X ) ; 5 M O V L W 0 x 8 3 // p r i m e i r a p a r t e do e n d e r e ¸c o 6 M O V W F r 0 x 0 0 7 M O V L W 0 x 0 f // s e g u n d a p a r t e do e n d e r e ¸c o 8 M O V W F r 0 x 0 1 9 M O V F F r0x00 , F S R 0 L 10 M O V F F r0x01 , F S R 0 H 11 M O V F F INDF0 , r 0 x 0 0 // r e a l i z a p r i m e i r a l e i t u r a 12 M O V L W 0 x 8 3 // p r i m e i r a p a r t e do e n d e r e ¸c o 13 M O V W F r 0 x 0 1 14 M O V L W 0 x 0 f // s e g u n d a p a r t e do e n d e r e ¸c o 15 M O V W F r 0 x 0 2 16 M O V F F r0x01 , F S R 0 L 17 M O V F F r0x02 , F S R 0 H 18 M O V F F INDF0 , r 0 x 0 1 // r e a l i z a s e g u n d a l e i t u r a 19 M O V F r0x00 , W

(29)

Modificadores de vari´aveis

Modificadores de Acesso

1 # d e f i n e P O R T B (*(n e a r u n s i g n e d c h a r*) 0 x F 8 3 ) 2 3 v o i d m a i n (v o i d) { 4 u n s i g n e d c h a r val ; 5 6 val = P O R T B ; 7 8 // a g u a r d a m u d a n ¸c a ; 9 w h i l e ( val != P O R T B ) ; 10 11 // v a l o r a c a b o u de m u d a r 12 }

(30)

Utiliza¸c˜ao de const: 1 # d e f i n e X (*(v o l a t i l e c o n s t n e a r u n s i g n e d c h a r*) 0 x F 8 3 ) 2 // i n i c i o do p r o g r a m a 3 v o i d m a i n (v o i d) 4 { 5 X = 3; 6 }

A compila¸c˜ao resulta em erro:

1 T e s t e . c : e r r o r 33: A t t e m p t to a s s i g n v a l u e to a c o n s t a n t ←-v a r i a b l e (=)

(31)

Modificadores de vari´aveis

Modificadores de Posicionamento

Existem dois modificadores de posicionamento

near far

N˜ao s˜ao padronizadas pela ISO C(99)

Indicam ao compilador a regi˜ao em que a vari´avel deve ser colocada

near - regi˜ao de acesso mais r´apido far - regi˜ao de acesso normal

(32)

A persistˆencia de uma vari´avel pode ser assegurada com o modificador static

Padronizada pela ISO C(99)

Garante que n˜ao haver´a perda de informa¸c˜ao na vari´avel Uma regi˜ao de mem´oria ´e reservada apenas para a vari´avel em quest˜ao 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 q u e ´e 2 // i n c r e m e n t a d o a c a d a c h a m a d a de f u n ¸c ~a o 3 int C o n t a d o r P e r s i s t e n t e (int r e s e t a ) { 4 c h a r v a r i a v e l _ p e r s i s t e n t e ; 5 if ( r e s e t a ) { v a r i a v e l _ p e r s i s t e n t e = 0;} 6 e l s e { r e t u r n ( v a r i a v e l _ p e r s i s t e n t e ++) ;}

(33)

Modificadores de vari´aveis

Modificador de persistˆ

encia

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 q u e ´e 2 // i n c r e m e n t a d o a c a d a c h a m a d a de f u n ¸c ~a o 3 4 int C o n t a d o r P e r s i s t e n t e (int r e s e t a ) { 5 s t a t i c c h a r v a r i a v e l _ p e r s i s t e n t e ; 6 7 if ( r e s e t a ) { 8 v a r i a v e l _ p e r s i s t e n t e = 0; 9 }e l s e{ 10 r e t u r n ( v a r i a v e l _ p e r s i s t e n t e ++) ; 11 } 12 r e t u r n -1; 13 }

(34)
(35)

Opera¸c˜oes Aritim´eticas

Opera¸c˜

oes Aritm´

eticas

1 v o i d m a i n (v o i d) { 2 c h a r v a r 8 ; 3 int v a r 1 6 ; 4 l o n g int v a r 3 2 ; 5 f l o a t p o n t 1 6 ; 6 d o u b l e p o n t 3 2 ; 7 v a r 8 = v a r 8 + v a r 1 6 ; // 1 8 v a r 8 = v a r 8 + v a r 8 ; // 2 9 v a r 1 6 = v a r 8 * v a r 8 ; // 3 10 v a r 3 2 = v a r 3 2 / v a r 1 6 ; // 4 11 v a r 3 2 = p o n t 3 2 * v a r 3 2 ; // 5 12 p o n t 1 6 = v a r 8 / v a r 1 6 ; // 6 13 p o n t 1 6 = p o n t 3 2 * v a r 3 2 ; // 7 14 p o n t 1 6 = 40 / 80; // 8 15 }

(36)
(37)

Fun¸c˜ao main()

Fun¸c˜

ao 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

(38)

O meio de indicar o ponto de in´ıcio de um programa depende do compilador.

Geralmente apenas a cria¸c˜ao da fun¸c˜ao main j´a ´e suficiente para o compilador

O linker aloca a fun¸c˜ao main() em algum lugar dispon´ıvel na mem´oria O linker atualiza o vetor de reset colocando um pulo para a fun¸c˜ao main

1 v o i d m a i n (v o i d)

2 {

3 // a q u i e n t r a o c ´o d i g o do p r o g r a m a

(39)

Fun¸c˜ao main()

Fun¸c˜

ao main()

Aten¸c˜ao!

Para sistemas embarcados a fun¸c˜ao main ´e a primeira a ser executada,

portanto n˜ao pode receber parˆametro nenhum. Como ela n˜ao ´e chamada

por nenhuma outra fun¸c˜ao, ela ´e a ´ultima a ser executada. Deste modo

n˜ao existe a possibilidade de retornar nenhum valor. Deve ser declarada

como:

1 v o i d m a i n (v o i d)

2 {

3 // I n s i r a o c ´o d i g o a q u i .

4 }

(40)

Geralmente os sistemas embarcados s˜ao feitos para serem continuamente executados

As rotinas devem ser c´ıclicas

O sistema s´o para quando desligado

Aten¸c˜ao!

(41)

Fun¸c˜ao main()

Fun¸c˜

ao main()

1 v o i d m a i n (v o i d) { 2 for( ; ; ) { 3 // a q u i e n t r a o 4 // c ´o d i g o p r i n c i p a l 5 } 6 } 1 v o i d m a i n (v o i d) { 2 w h i l e(1) { 3 // a q u i e n t r a o 4 // c ´o d i g o p r i n c i p a l 5 } 6 }

(42)
(43)

Rotinas de Tempo

Rotinas de Tempo

´

E muito comum necessitar que o microcontrolador fique um tempo sem fazer nada. Uma maneira de atingir esse objetivo ´e utilizar um la¸co for.

1 u n s i g n e d c h a r i ; 2 for( i =0; i < 10; i ++) ;

Aten¸c˜ao!

Notar que n˜ao estamos utilizando os colchetes depois dofor.

(44)

1 // c ´o d i g o em a s s e m b l y e q u i v a l e n t e do : f o r ( i = 0 ; i<10 ; i + + ) ; 2 M O V F r0x00 , W // i n i c i a l i z a W c o m 0 ( 1 c i c l o ) 3 S U B L W 0 x 0 a // c o l o c a 10 ( 0 x 0 a ) no r e g i s t r o W ( 1 c i c l o ) 4 M O V W F r 0 x 0 0 // m u d a o v a l o r de W p a r a F ( 1 c i c l o ) 5 _ 0 0 1 0 7 _ D S _: // l a b e l ( e t i q u e t a ) 6 D E C F S Z r0x00 , F // d e c r e m e n t a e se F>0 e x e c u t a ( 1 c i c l o ) 7 BRA _ 0 0 1 0 7 _ D S _ // " p u l a " p a r a o l u g a r 0 0 1 0 7 D S ( 2 c i c l o s )

(45)

Rotinas de Tempo

Rotinas de Tempo

S˜ao gastos 3 passos para inicializa¸c˜ao, cada um de 1 ciclo. Cada itera¸c˜ao 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˜ao necess´arias 2 ∗ 109∗ x instru¸c˜oes.

(46)

1 u n s i g n e d c h a r i , j , k ; 2 for( i =0; i < 34; i ++) { // 3 + 34 ∗( 30 , 0 0 3 + 3 ) = 1 , 020 , 2 0 7 3 for( j =0; j < 100; j ++) { // 3 + 1 0 0 ∗( 2 9 7 + 3 ) = 30 , 0 0 3 4 for( k =0; k < 98; k ++) ; // 3 + 98 ∗( 3 ) = 2 9 7 i n s t r u ¸c ~o e s 5 } 6 }

Referências

Documentos relacionados

Isso nos faz propor para reflexão um aspect o relevant e: a democrat ização inst it ucio nal da qualificação profissio nal não é capaz de mo bilizar agent es e recur sos que reins

As árvores onde cada nó que não seja folha numa árvore binária tem sub- árvores esquerda e direita não vazias são conhecidas como árvores estritamente binárias.. apresenta

• Fazer um programa para receber dois números do usuário e calcular MDC entre eles utilizando o método de Euclides (não-recursivo) (Pesquise sobre o método de Euclides – DICA:

Como a pr´opria fun¸c˜ao cons- tante 0 ´e uma solu¸c˜ao de qualquer EDO linear homogˆenea, aquele conjunto de solu¸c˜oes n˜ao ´e vazio, constituindo um subespa¸co vetorial

Co-rotinas as- sim´ etricas provˆ eem, contudo, uma solu¸c˜ ao bem mais simples e estruturada, permitindo a implementa¸c˜ ao do consumidor como uma fun¸c˜ ao convencional, que

A obra “Brasil em crise” (2015), de organização de Vitor Cei e David Borges, é fruto de duas edições do “Seminário de Pesquisa Social: Brasil em crise” realizado em 2014

As questões de gênero e sexualidade historicamente localizam-se às margens do currículo oficialmente trabalhado na escola, sendo limitadas a uma discussão

Algumas sementes e castanhas vão ficar só nessa etapa de hidratação pois já passaram por um processo térmico no caso de algumas castanhas e nozes, outras sementes descascadas