Operações com Bits
-
Upload
rodrigo-almeida -
Category
Technology
-
view
1.932 -
download
1
description
Transcript of Operações com Bits
Programacao de sistemas embarcados: Operacoes combits
Prof.MSc.Rodrigo Maximiano Antunes de Almeida
Universidade Federal de Itajuba
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 1 / 38
Linguagem CTipos de dados em C
Tipos de dados em C
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 2 / 38
Linguagem CTipos 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 Programacao de sistemas embarcados: Operacoes com [email protected] 3 / 38
Linguagem CConversao Binario, Decimal, Hexadecimal
Conversao Binario-decimal
Dividir o numero por 2
Anotar o valor do resto (0 ou 1)
Se o valor e maior que 0 voltar ao numero 1
Escrever os valores obtidos atraves do passo 2 de tras para frente.
Apresentar o resultado
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 4 / 38
Linguagem CConversao Binario, 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 Programacao de sistemas embarcados: Operacoes com [email protected] 5 / 38
Linguagem CConversao Binario, Decimal, Hexadecimal
Base Hexadecimal
Possui 16 ”unidades”diferentes.10 algarismos mais 6 letrasFacilita escrita de valores binariosFacil conversao bin-hex
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 6 / 38
Linguagem CConversao Binario, 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 Programacao de sistemas embarcados: Operacoes com [email protected] 7 / 38
Linguagem COperacoes com bits
Operacoes com bits
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 8 / 38
Linguagem COperacoes com bits
Operacao logica NOT
A !A
0 1
1 0
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 9 / 38
Linguagem COperacoes com bits
Declaracao Logico 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 = 2433 // A = 0b000011004 // r = 0b11110011
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 10 / 38
Linguagem COperacoes com bits
Operacao logica AND
A B A&&B
0 0 0
0 1 0
1 0 0
1 1 1
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 11 / 38
Linguagem COperacoes com bits
Declaracao Logico Bitwise
1 char A = 8 ;2 // A = 0b000010003 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 = 03 // A = 0b000010004 // B = 0b000001015 // r = 0b00000000
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 12 / 38
Linguagem COperacoes com bits
Operacao logica OR
A B A||B0 0 0
0 1 1
1 0 1
1 1 1
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 13 / 38
Linguagem COperacoes com bits
Declaracao Logico Bitwise
1 char A = 8 ;2 // A = 0b000010003 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 = 133 // A = 0b000010004 // B = 0b000001015 // r = 0b00001101
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 14 / 38
Linguagem COperacoes com bits
Operacao logica XOR
A B A xor B
0 0 0
0 1 1
1 0 1
1 1 0
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 15 / 38
Linguagem COperacoes com bits
Declaracao Logico Bitwise
1 char A = 8 ;2 // A = 0b000010003 char B = 5 ;4 // B = 0b00000101
1 // nao e x i s t e ←↩em C
1 result = A ˆ B ;2 // r e s u l t = 133 // A = 0b000010004 // B = 0b000001015 // r = 0b00001101
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 16 / 38
Linguagem COperacoes com bits
A operacao shift desloca os bits
Para a esquerda operador <<
Para direita operador >>
E necessario indicar quantas casas serao deslocadas
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 17 / 38
Linguagem COperacoes com bits
Declaracao Shift Esquerda Shift Direita
1 char A = 8 ;2 // A = 0b00001000
1 result = A << 2 ;2 // r e s u l t = 323 // A = 0b000010004 // r = 0b00100000
1 result = A >> 2 ;2 // r e s u l t = 23 // A = 0b000010004 // r = 0b00000010
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 18 / 38
Linguagem COperacoes com bits
Ligar um bit
Criar uma ”mascara”cheia de 0 (zeros) e com 1 (um) apenas naposicao desejadaFazer uma operacao OR entre a variavel e a mascara
Posicao N . . . X+1 X X-1 . . . 0
Valor 0 . . . 0 1 0 . . . 0
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 19 / 38
Linguagem COperacoes com bits
Desligar um bit
Criar uma ”mascara”cheia de 1 (uns) e com 0 (zero) apenas naposicao desejadaFazer uma operacao AND entre a variavel e a mascara
Posicao N . . . X+1 X X-1 . . . 0
Valor 1 . . . 1 0 1 . . . 1
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 20 / 38
Linguagem COperacoes com bits
Trocar o valor de um bit
Criar uma ”mascara”cheia de 0 (zeros) e com 1 (um) apenas naposicao desejadaFazer uma operacao XOR entre a variavel e a mascara
Posicao N . . . X+1 X X-1 . . . 0
Valor 0 . . . 0 1 0 . . . 0
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 21 / 38
Linguagem COperacoes com bits
Verificar o estado de um bit
Criar uma ”mascara”cheia de 0 (zeros) e com 1 (um) apenas naposicao desejadaFazer uma operacao AND entre a variavel e a mascaraNao atribuir o resultado a variavel
Posicao N . . . X+1 X X-1 . . . 0
Valor 0 . . . 0 1 0 . . . 0
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 22 / 38
Linguagem COperacoes com defines
Operacoes com defines
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 23 / 38
Linguagem COperacoes com defines
Operacao 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 Programacao de sistemas embarcados: Operacoes com [email protected] 24 / 38
Linguagem COperacoes com defines
Operacao 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 Programacao de sistemas embarcados: Operacoes com [email protected] 25 / 38
Linguagem COperacoes com defines
Operacao Bit flip
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 BitFlp ( arg , bit ) ( ( arg ) ˆ= (1<<bit ) )
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 26 / 38
Linguagem COperacoes com defines
Operacao 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 Programacao de sistemas embarcados: Operacoes com [email protected] 27 / 38
Linguagem CDebug de sistemas embarcados
Debug de sistemas embarcados
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 28 / 38
Linguagem CDebug de sistemas embarcados
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 29 / 38
Linguagem CDebug de sistemas embarcados
Tipos de bugs:
BohrbugMandelbug
HeisenbugSchroedinbug
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 30 / 38
Linguagem CDebug de sistemas embarcados
Bohrbug
Bug ”bem comportado”E possıvel repetir o bugNao se altera com observacao
Niels H. D. Bohr
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 31 / 38
Linguagem CDebug de sistemas embarcados
Mandelbug
Oposto do BohrbugTem causas extremamentecomplicadasParece ter comportamentocaotico e indeterminado
Benoıt B. Mandelbrot
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 32 / 38
Linguagem CDebug de sistemas embarcados
Heisenbug
A utilizacao de ferramentas dedebug fazem o bugdesaparecerPode estar ligado a operacoestemporais, paralelismo defuncoesIntertravamento e obtencaode recursos
Werner K. Heisenberg
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 33 / 38
Linguagem CDebug de sistemas embarcados
Schroedinbug
Um programa estafuncionandoAo olhar o codigo descobre-seque ele nao devia funcionarA partir deste momento oprograma para de funcionar
Erwin R. J. A.Schrodinger
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 34 / 38
Linguagem CDebug de sistemas embarcados
Como debugar sistemas embarcados?
Externalizar as informacoesProgramacao incrementalChecar possıveis pontos de memory-leakExiste possibilidade de fragmentacao da memoria?Otimizacao de codigoReproduzir e isolar o erro
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 35 / 38
Linguagem CDebug de sistemas embarcados
Externalizar as informacoes
Cuidado com overheadSeparar alguns leds apenas para debugEnviar sinais via serial apenas se necessarioUsar um emulador para obter informacoes
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 36 / 38
Linguagem CDebug de sistemas embarcados
Programacao incremental
Apenas inserir mais funcoes depois de ter uma primeira versao funcionalTestar apos cada alteracao do codigo
Checar possıveis pontos de memory-leak
Verificar se cada malloc() possui seu free()
Existe possibilidade de fragmentacao da memoria?
Repensar rotinas que utilizam malloc() e free() demasiadamente
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 37 / 38
Linguagem CDebug de sistemas embarcados
Otimizacao de codigo
Nunca otimizar se nao for necessarioSe achar que e necessario utilizar um profiler antesVerificar as otimizacoes ja realizadas em busca de overflows, typecastsinadequados, segmentation faults, etc.
Reproduzir e isolar o erro
Abusar do step-by-step de debugTestar repetibilidade do erroIsolar as funcoes problematicas
ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 38 / 38