Buscar

Programação embarcada - Tipos de dados

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 46 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 46 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 46 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Tipos de dados, func¸a˜o main() e rotinas de tempo
Rodrigo Almeida
Universidade Federal de Itajuba´
rodrigomax@unifei.edu.br
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 1 / 46
Revisa˜o
Revisa˜o
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 2 / 46
Revisa˜o
Dados Importantes
Teo´rica:
Local ⇒ Sala I.2.1.11
Hora´rio ⇒ 4T12
Laborato´rio (ELTP14):
Local ⇒ Sala LEC II
Hora´rio ⇒
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 esta˜o sujeitas a alterac¸o˜es
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 3 / 46
Revisa˜o
Refereˆncia circular (rev)
A func¸a˜o LerTemperatura() faz um teste: se o valor for maior que um
patamar chama a func¸a˜o EnviaSerial() com o co´digo 0x30.
1 #include "serial.h"
2 char LerTemperatura(void);
3 void AjustaCalor(char val);
A func¸a˜o LerSerial() recebe um valor e repassa para a func¸a˜o
AjustaCalor().
1 #include "temp.h"
2 char LerSerial(void);
3 void EnviaSerial(char val);
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 4 / 46
Revisa˜o
Refereˆ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
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 5 / 46
Revisa˜o
Refereˆncia circular (rev)
Soluc¸a˜o: criar uma estrutura de controle para pre´ compilac¸a˜o.
1 #ifndef TAG_CONTROLE
2 #define TAG_CONTROLE
3 // todo o conteu´do do arquivo vem aqui.
4
5 #endif // TAG CONTROLE
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 6 / 46
Revisa˜o
Refereˆncia 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
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 7 / 46
Tipos de dados em C
Tipos de dados em C
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 8 / 46
Tipos de dados em C
Tipos de dados em C
Toda informac¸a˜o que e´ inserida num computador e´ armazenada em
formato bina´rio;
Cada tipo de informac¸a˜o conte´m uma quantidade diferente de bits;
Cada bit pode representar informac¸o˜es diferentes, mesmo dentro de
uma mesma varia´vel.
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 9 / 46
Tipos de dados em C
Tipos de dados em C
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....
... da arquitetura, do compilador e das configurac¸o˜es.
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 10 / 46
Tipos de dados em C
Conversa˜o Bina´rio, Decimal, Hexadecimal
Quando resolvemos codificar uma informac¸a˜o num formato digital, e
portanto finito, sempre existe perda de
informac¸a˜o
resoluc¸a˜o
amplitude
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 11 / 46
Tipos de dados em C
Conversa˜o Bina´rio, Decimal, Hexadecimal
Calcule quantas iterac¸o˜es possui cada loop:
1 float x = 0;
2
3 while (x != 4){
4 x += 0.4f;
5 }
1 char x = 0;
2
3 while (x < 200){
4 x++;
5 }
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 12 / 46
Tipos de dados em C
Conversa˜o Bina´rio, Decimal, Hexadecimal
Conversa˜o Bina´rio-decimal
Dividir o nu´mero por 2
Anotar o valor do resto (0 ou 1)
Se o valor e´ maior que 0 voltar ao nu´mero 1
Escrever os valores obtidos atrave´s do passo 2 de tra´s para frente.
Apresentar o resultado
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 13 / 46
Tipos de dados em C
Conversa˜o Bina´rio, Decimal, Hexadecimal
Exercicio 01) Converter os nu´meros
18
513
73
60
-15
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 14 / 46
Tipos de dados em C
Conversa˜o Bina´rio, Decimal, Hexadecimal
Nu´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
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 15 / 46
Tipos de dados em C
Conversa˜o Bina´rio, Decimal, Hexadecimal
A representac¸a˜o de nu´meros negativos e´ feita atrave´s do MSB
0 = positivo
1 = negativo
Me´todo de conversa˜o: complemento de dois
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 16 / 46
Tipos de dados em C
Conversa˜o Bina´rio, Decimal, Hexadecimal
Complemento de dois
Definir tamanho da palavra
Achar a representac¸a˜o em bina´rio positiva com a mesma magnitude
Inverter todos os bits
Somar um ao resultado
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 17 / 46
Tipos de dados em C
Conversa˜o Bina´rio, Decimal, Hexadecimal
Nu´meros fraciona´rios (ponto flutuante)
Sa˜o 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
Ponto fixo
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 18 / 46
Tipos de dados em C
Conversa˜o Bina´rio, Decimal, Hexadecimal
Base Hexadecimal
Possui 16 “unidades”diferentes.
10 algarismos mais 6 letras
Facilita escrita de valores bina´rios
Fa´cil conversa˜o bin-hex
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 19 / 46
Tipos de dados em C
Conversa˜o Bina´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
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 20 / 46
Tipos de dados em C
Conversa˜o Bina´rio, Decimal, Hexadecimal
Exercicio 02) Converter os nu´meros
1810 - 100102
51310 - 10000000012
7310 - 10010012
6010 - 1111002
-1510 - 111100012 8bits
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 21 / 46
Tipos de dados em C
Conversa˜o Bina´rio, Decimal, Hexadecimal
Exercicio 02) Converter os nu´meros
como: 1810= 1-00102
12 = 116
00102 = 216
logo :
100102. = 1216.
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 22 / 46
Modificadores de varia´veis
Modificadores de varia´veis
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 23 / 46
Modificadores de varia´veis
Modificadores de tamanho e sinal
Tipo Bytes Excursa˜o ma´xima
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
short int 2 -32.768 a` 32.767
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 24 / 46
Modificadoresde varia´veis
Modificadores de Acesso
1 #define X (*( near unsigned char*)0xF83)
2 void main(void){
3 while (X!=X);
4 }
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 25 / 46
Modificadores de varia´veis
Modificadores de Acesso
Compilando o co´digo anterior temos em assembly:
1 // Starting pCode block
2 S_Teste__main code
3 _main:
4 .line 19 // Teste.c while (X!=X);
5
6 RETURN
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 26 / 46
Modificadores de varia´veis
Modificadores de Acesso
1 #define X (*( volatile near unsigned char*)0xF83)
2 void main(void)
3 {
4 while (X!=X);
5 }
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 27 / 46
Modificadores de varia´veis
Modificadores de Acesso
1 S_Teste__main code // Starting pCode block
2 _main:
3 _00105_DS_:
4 .line 19 // Teste.c while (X != X);
5 MOVLW 0x83 // primeira parte do enderec¸o
6 MOVWF r0x00
7 MOVLW 0x0f // segunda parte do enderec¸o
8 MOVWF r0x01
9 MOVFF r0x00 , FSR0L
10 MOVFF r0x01 , FSR0H
11 MOVFF INDF0 , r0x00 // realiza primeira leitura
12 MOVLW 0x83 // primeira parte do enderec¸o
13 MOVWF r0x01
14 MOVLW 0x0f // segunda parte do enderec¸o
15 MOVWF r0x02
16 MOVFF r0x01 , FSR0L
17 MOVFF r0x02 , FSR0H
18 MOVFF INDF0 , r0x01 // realiza segunda leitura
19 MOVF r0x00 , W
20 XORWF r0x01 , W
21 BNZ _00105_DS_ // faz o teste para igualdade
22 RETURN
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 28 / 46
Modificadores de varia´veis
Modificadores de Acesso
1 #define PORTB (*( near unsigned char*)0xF83)
2
3 void main(void){
4 unsigned char val;
5
6 val = PORTB;
7
8 // aguarda mudanc¸a ;
9 while (val!=PORTB);
10
11 // valor acabou de mudar
12 }
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 29 / 46
Modificadores de varia´veis
Modificadores de Acesso
Utilizac¸a˜o de const:
1 #define X (*( volatile const near unsigned char*)0xF83)
2 // inicio do programa
3 void main(void)
4 {
5 X = 3;
6 }
A compilac¸a˜o resulta em erro:
1 Teste.c: error 33: Attempt to assign value to a constant ←↩
variable (=)
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 30 / 46
Modificadores de varia´veis
Modificadores de Posicionamento
Existem dois modificadores de posicionamento
near
far
Na˜o sa˜o padronizadas pela ISO C(99)
Indicam ao compilador a regia˜o em que a varia´vel deve ser colocada
near - regia˜o de acesso mais ra´pido
far - regia˜o de acesso normal
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 31 / 46
Modificadores de varia´veis
Modificador de persisteˆncia
A persisteˆncia de uma varia´vel pode ser assegurada com o
modificador static
Padronizada pela ISO C(99)
Garante que na˜o havera´ perda de informac¸a˜o na varia´vel
Uma regia˜o de memo´ria e´ reservada apenas para a varia´vel em
questa˜o
1 // cria um contador persistente que e´
2 // incrementado a cada chamada de func¸~ao
3 int ContadorPersistente(int reseta){
4 char variavel_persistente;
5 if (reseta) { variavel_persistente = 0;}
6 else { return (variavel_persistente ++);}
7 return -1;
8 }
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 32 / 46
Modificadores de varia´veis
Modificador de persisteˆncia
1 // cria um contador persistente que e´
2 // incrementado a cada chamada de func¸~ao
3
4 int ContadorPersistente(int reseta){
5 static char variavel_persistente;
6
7 if (reseta){
8 variavel_persistente = 0;
9 }else{
10 return (variavel_persistente ++);
11 }
12 return -1;
13 }
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 33 / 46
Operac¸o˜es Aritime´ticas
Operac¸o˜es Aritime´ticas
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 34 / 46
Operac¸o˜es Aritime´ticas
Operac¸o˜es Aritme´ticas
1 void main (void){
2 char var8;
3 int var16;
4 long int var32;
5 float pont16;
6 double pont32;
7 var8 = var8 + var16; // 1
8 var8 = var8 + var8; // 2
9 var16 = var8 * var8; // 3
10 var32 = var32 / var16; // 4
11 var32 = pont32 * var32; // 5
12 pont16 = var8 / var16; // 6
13 pont16 = pont32 * var32; // 7
14 pont16 = 40 / 80; // 8
15 }
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 35 / 46
Func¸a˜o main()
Func¸a˜o main()
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 36 / 46
Func¸a˜o main()
Func¸a˜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
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 37 / 46
Func¸a˜o main()
Func¸a˜o main()
O meio de indicar o ponto de in´ıcio de um programa depende do
compilador.
Geralmente apenas a criac¸a˜o da func¸a˜o main ja´ e´ suficiente para o
compilador
O linker aloca a func¸a˜o main() em algum lugar dispon´ıvel na memo´ria
O linker atualiza o vetor de reset colocando um pulo para a func¸a˜o
main
1 void main (void)
2 {
3 // aqui entra o co´digo do programa
4 }
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 38 / 46
Func¸a˜o main()
Func¸a˜o main()
Atenc¸a˜o!
Para sistemas embarcados a func¸a˜o main e´ a primeira a ser executada,
portanto na˜o pode receber paraˆmetro nenhum. Como ela na˜o e´ chamada
por nenhuma outra func¸a˜o, ela e´ a u´ltima a ser executada. Deste modo
na˜o existe a possibilidade de retornar nenhum valor. Deve ser declarada
como:
1 void main (void)
2 {
3 // Insira o co´digo aqui.
4 }
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 39 / 46
Func¸a˜o main()
Func¸a˜o main()
Geralmente os sistemas embarcados sa˜o feitos para serem
continuamente executados
As rotinas devem ser c´ıclicas
O sistema so´ para quando desligado
Atenc¸a˜o!
Nesta situac¸a˜o utiliza-se loops infinitos.
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 40 / 46
Func¸a˜o main()
Func¸a˜o main()
1 void main (void) {
2 for (;;){
3 // aqui entra o
4 // co´digo principal
5 }
6 }
1 void main (void) {
2 while(1){
3 // aqui entra o
4 // co´digo principal
5 }
6 }
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 41 / 46
Rotinas de Tempo
Rotinas de Tempo
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 42 / 46
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 lac¸o for.
1 unsigned char i;
2 for(i=0; i < 10; i++);
Atenc¸a˜o!
Notar que na˜o estamos utilizando os colchetes depois do for.
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 43 / 46
Rotinas de Tempo
Rotinas de Tempo
1 // co´digo em assembly equivalente do: for(i=0; i<10; i++);
2 MOVF r0x00 , W // inicializa W com 0 (1 ciclo)
3 SUBLW 0x0a // coloca 10 (0x0a) no registro W (1 ciclo)
4 MOVWF r0x00 // muda o valor de W para F (1 ciclo)
5 _00107_DS_: // label (etiqueta)
6 DECFSZ r0x00 , F // decrementa e se F>0 executa (1 ciclo)
7 BRA _00107_DS_ //"pula" para o lugar 00107 DS (2 ciclos)
ECOP04 Tipos de dados, func¸a˜o main() e rotinasde temporodrigomax@unifei.edu.br 44 / 46
Rotinas de Tempo
Rotinas de Tempo
Sa˜o gastos 3 passos para inicializac¸a˜o, cada um de 1 ciclo.
Cada iterac¸a˜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 sa˜o necessa´rias 2 ∗ 109 ∗ x
instruc¸o˜es.
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 45 / 46
Rotinas de Tempo
Rotinas de Tempo
1 unsigned char i, j, k;
2 for(i=0; i < 34; i++){ //3+34∗(30 ,003+3) = 1,020 ,207
3 for(j=0; j < 100; j++){ //3+100∗(297 + 3) = 30 ,003
4 for(k=0; k < 98; k++); // 3+98∗(3) = 297 instruc¸~oes
5 }
6 }
ECOP04 Tipos de dados, func¸a˜o main() e rotinas de temporodrigomax@unifei.edu.br 46 / 46
	Revisão
	Tipos de dados em C
	Modificadores de variáveis
	Operações Aritiméticas
	Função main()
	Rotinas de Tempo

Continue navegando