Buscar

elt024 03 operacoescombits

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 38 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 38 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 38 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

Programac¸a˜o de sistemas embarcados: Operac¸o˜es com
bits
Prof.MSc.Rodrigo Maximiano Antunes de Almeida
Universidade Federal de Itajuba´
rodrigomax@unifei.edu.br
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 1 / 38
Linguagem C
Tipos de dados em C
Tipos de dados em C
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 2 / 38
Linguagem 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
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 3 / 38
Linguagem 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
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 4 / 38
Linguagem C
Conversa˜o Bina´rio, Decimal, Hexadecimal
Bit número 7 6 5 4 3 2 1 0
Potência de 2 27 26 25 24 23 22 21 20
Valor em decimal 128 64 32 16 8 4 2 1
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 5 / 38
Linguagem 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
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 6 / 38
Linguagem 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
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 7 / 38
Linguagem C
Operac¸o˜es com bits
Operac¸o˜es com bits
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 8 / 38
Linguagem C
Operac¸o˜es com bits
Operac¸a˜o lo´gica NOT
A !A
0 1
1 0
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 9 / 38
Linguagem C
Operac¸o˜es com bits
Declarac¸a˜o Lo´gico Bitwise
1 char A = 1 2 ;
2 // A = 0b00001100
1 result = ! A ;
2 // r e s u l t = 0
1 result = ˜A ;
2 // r e s u l t = 243
3 // A = 0b00001100
4 // r = 0b11110011
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 10 / 38
Linguagem C
Operac¸o˜es com bits
Operac¸a˜o lo´gica AND
A B A&&B
0 0 0
0 1 0
1 0 0
1 1 1
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 11 / 38
Linguagem C
Operac¸o˜es com bits
Declarac¸a˜o Lo´gico Bitwise
1 char A = 8 ;
2 // A = 0b00001000
3 char B = 5 ;
4 // B = 0b00000101
1 result = A && B ;
2 // r e s u l t = 1
1 result = A & B ;
2 // r e s u l t = 0
3 // A = 0b00001000
4 // B = 0b00000101
5 // r = 0b00000000
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 12 / 38
Linguagem C
Operac¸o˜es com bits
Operac¸a˜o lo´gica OR
A B A||B
0 0 0
0 1 1
1 0 1
1 1 1
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 13 / 38
Linguagem C
Operac¸o˜es com bits
Declarac¸a˜o Lo´gico Bitwise
1 char A = 8 ;
2 // A = 0b00001000
3 char B = 5 ;
4 // B = 0b00000101
1 result = A | | B ;
2 // r e s u l t = 1
1 result = A | B ;
2 // r e s u l t = 13
3 // A = 0b00001000
4 // B = 0b00000101
5 // r = 0b00001101
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 14 / 38
Linguagem C
Operac¸o˜es com bits
Operac¸a˜o lo´gica XOR
A B A xor B
0 0 0
0 1 1
1 0 1
1 1 0
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 15 / 38
Linguagem C
Operac¸o˜es com bits
Declarac¸a˜o Lo´gico Bitwise
1 char A = 8 ;
2 // A = 0b00001000
3 char B = 5 ;
4 // B = 0b00000101
1 // na˜o e x i s t e ←↩
em C
1 result = A ˆ B ;
2 // r e s u l t = 13
3 // A = 0b00001000
4 // B = 0b00000101
5 // r = 0b00001101
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 16 / 38
Linguagem C
Operac¸o˜es com bits
A operac¸a˜o shift desloca os bits
Para a esquerda operador <<
Para direita operador >>
E´ necessa´rio indicar quantas casas sera˜o deslocadas
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 17 / 38
Linguagem C
Operac¸o˜es com bits
Declarac¸a˜o Shift Esquerda Shift Direita
1 char A = 8 ;
2 // A = 0b00001000
1 result = A << 2 ;
2 // r e s u l t = 32
3 // A = 0b00001000
4 // r = 0b00100000
1 result = A >> 2 ;
2 // r e s u l t = 2
3 // A = 0b00001000
4 // r = 0b00000010
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 18 / 38
Linguagem C
Operac¸o˜es com bits
Ligar um bit
Criar uma ”ma´scara”cheia de 0 (zeros) e com 1 (um) apenas na
posic¸a˜o desejada
Fazer uma operac¸a˜o OR entre a varia´vel e a ma´scara
Posic¸a˜o N . . . X+1 X X-1 . . . 0
Valor 0 . . . 0 1 0 . . . 0
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 19 / 38
Linguagem C
Operac¸o˜es com bits
Desligar um bit
Criar uma ”ma´scara”cheia de 1 (uns) e com 0 (zero) apenas na
posic¸a˜o desejada
Fazer uma operac¸a˜o AND entre a varia´vel e a ma´scara
Posic¸a˜o N . . . X+1 X X-1 . . . 0
Valor 1 . . . 1 0 1 . . . 1
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 20 / 38
Linguagem C
Operac¸o˜es com bits
Trocar o valor de um bit
Criar uma ”ma´scara”cheia de 0 (zeros) e com 1 (um) apenas na
posic¸a˜o desejada
Fazer uma operac¸a˜o XOR entre a varia´vel e a ma´scara
Posic¸a˜o N . . . X+1 X X-1 . . . 0
Valor 0 . . . 0 1 0 . . . 0
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 21 / 38
Linguagem C
Operac¸o˜es com bits
Verificar o estado de um bit
Criar uma ”ma´scara”cheia de 0 (zeros) e com 1 (um) apenas na
posic¸a˜o desejada
Fazer uma operac¸a˜o AND entre a varia´vel e a ma´scara
Na˜o atribuir o resultado a` varia´vel
Posic¸a˜o N . . . X+1 X X-1 . . . 0
Valor 0 . . . 0 1 0 . . . 0
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 22 / 38
Linguagem C
Operac¸o˜es com defines
Operac¸o˜es com defines
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 23 / 38
Linguagem C
Operac¸o˜es com defines
Operac¸a˜o Bit set
Passo a Passo
1 char bit = 2 ;
2 char mascara ;
3 mascara = 1 << bit ;
4 arg = arg | mascara ;
Uma linha 1 arg |= (1<<bit )
Com define 1 #define BitSet ( arg , bit ) ( ( arg ) |= (1<<bit ) )
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 24 / 38
Linguagem C
Operac¸o˜es com defines
Operac¸a˜o Bit clear
Passo a Passo
1 char bit = 2 ;
2 char mascara ;
3 mascara = 1 << bit ;
4 arg = arg & ˜mascara ;
Uma linha 1 arg &= ˜(1<<bit )
Com define 1 #define BitClr ( arg , bit ) ( ( arg ) &= ˜(1<<bit ) )
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 25 / 38
Linguagem C
Operac¸o˜es com defines
Operac¸a˜o Bit flip
Passo a Passo
1 char bit = 2 ;
2 char mascara ;
3 mascara = 1 << bit ;
4 arg = arg ˆ mascara ;
Uma linha1 arg ˆ= (1<<bit )
Com define 1 #define BitFlp ( arg , bit ) ( ( arg ) ˆ= (1<<bit ) )
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 26 / 38
Linguagem C
Operac¸o˜es com defines
Operac¸a˜o Bit test
Passo a Passo
1 char bit = 2 ;
2 char mascara ;
3 mascara = 1 << bit ;
4 i f ( arg & mascara ) { }
Uma linha 1 i f ( arg & (1<<bit ) ) { }
Com define 1 #define BitTst ( arg , bit ) ( ( arg ) & (1<<bit ) )
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 27 / 38
Linguagem C
Debug de sistemas embarcados
Debug de sistemas embarcados
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 28 / 38
Linguagem C
Debug de sistemas embarcados
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 29 / 38
Linguagem C
Debug de sistemas embarcados
Tipos de bugs:
Bohrbug
Mandelbug
Heisenbug
Schroedinbug
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 30 / 38
Linguagem C
Debug de sistemas embarcados
Bohrbug
Bug ”bem comportado”
E´ poss´ıvel repetir o bug
Na˜o se altera com observac¸a˜o
Niels H. D. Bohr
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 31 / 38
Linguagem C
Debug de sistemas embarcados
Mandelbug
Oposto do Bohrbug
Tem causas extremamente
complicadas
Parece ter comportamento
cao´tico e indeterminado
Benoˆıt B. Mandelbrot
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 32 / 38
Linguagem C
Debug de sistemas embarcados
Heisenbug
A utilizac¸a˜o de ferramentas de
debug fazem o bug
desaparecer
Pode estar ligado a operac¸o˜es
temporais, paralelismo de
func¸o˜es
Intertravamento e obtenc¸a˜o
de recursos
Werner K. Heisenberg
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 33 / 38
Linguagem C
Debug de sistemas embarcados
Schroedinbug
Um programa esta´
funcionando
Ao olhar o co´digo descobre-se
que ele na˜o devia funcionar
A partir deste momento o
programa para de funcionar
Erwin R. J. A.
Schro¨dinger
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 34 / 38
Linguagem C
Debug de sistemas embarcados
Como debugar sistemas embarcados?
Externalizar as informac¸o˜es
Programac¸a˜o incremental
Checar poss´ıveis pontos de memory-leak
Existe possibilidade de fragmentac¸a˜o da memo´ria?
Otimizac¸a˜o de co´digo
Reproduzir e isolar o erro
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 35 / 38
Linguagem C
Debug de sistemas embarcados
Externalizar as informac¸o˜es
Cuidado com overhead
Separar alguns leds apenas para debug
Enviar sinais via serial apenas se necessa´rio
Usar um emulador para obter informac¸o˜es
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 36 / 38
Linguagem C
Debug de sistemas embarcados
Programac¸a˜o incremental
Apenas inserir mais func¸o˜es depois de ter uma primeira versa˜o funcional
Testar apo´s cada alterac¸a˜o do co´digo
Checar poss´ıveis pontos de memory-leak
Verificar se cada malloc() possui seu free()
Existe possibilidade de fragmentac¸a˜o da memo´ria?
Repensar rotinas que utilizam malloc() e free() demasiadamente
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 37 / 38
Linguagem C
Debug de sistemas embarcados
Otimizac¸a˜o de co´digo
Nunca otimizar se na˜o for necessa´rio
Se achar que e´ necessa´rio utilizar um profiler antes
Verificar as otimizac¸o˜es ja´ realizadas em busca de overflows, typecasts
inadequados, segmentation faults, etc.
Reproduzir e isolar o erro
Abusar do step-by-step de debug
Testar repetibilidade do erro
Isolar as func¸o˜es problema´ticas
ELT024 Programac¸a˜o de sistemas embarcados: Operac¸o˜es com bitsrodrigomax@unifei.edu.br 38 / 38

Outros materiais