Operações com Bits

38
Programa¸c˜ ao de sistemas embarcados: Opera¸ c˜oescom bits Prof.MSc.Rodrigo Maximiano Antunes de Almeida Universidade Federal de Itajub´ a [email protected] ELT024 Programa¸ ao de sistemas embarcados: Opera¸ [email protected] 1 / 38

description

Terceira aula: operações com bits e dicas para debugar sistemas embarcados

Transcript of Operações com Bits

Page 1: Operações com Bits

Programacao de sistemas embarcados: Operacoes combits

Prof.MSc.Rodrigo Maximiano Antunes de Almeida

Universidade Federal de Itajuba

[email protected]

ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 1 / 38

Page 2: Operações com Bits

Linguagem CTipos de dados em C

Tipos de dados em C

ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 2 / 38

Page 3: Operações com Bits

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

Page 4: Operações com Bits

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

Page 5: Operações com Bits

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

Page 6: Operações com Bits

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

Page 7: Operações com Bits

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

Page 8: Operações com Bits

Linguagem COperacoes com bits

Operacoes com bits

ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 8 / 38

Page 9: Operações com Bits

Linguagem COperacoes com bits

Operacao logica NOT

A !A

0 1

1 0

ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 9 / 38

Page 10: Operações com Bits

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

Page 11: Operações com Bits

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

Page 12: Operações com Bits

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

Page 13: Operações com Bits

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

Page 14: Operações com Bits

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

Page 15: Operações com Bits

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

Page 16: Operações com Bits

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

Page 17: Operações com Bits

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

Page 18: Operações com Bits

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

Page 19: Operações com Bits

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

Page 20: Operações com Bits

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

Page 21: Operações com Bits

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

Page 22: Operações com Bits

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

Page 23: Operações com Bits

Linguagem COperacoes com defines

Operacoes com defines

ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 23 / 38

Page 24: Operações com Bits

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

Page 25: Operações com Bits

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

Page 26: Operações com Bits

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

Page 27: Operações com Bits

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

Page 28: Operações com Bits

Linguagem CDebug de sistemas embarcados

Debug de sistemas embarcados

ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 28 / 38

Page 29: Operações com Bits

Linguagem CDebug de sistemas embarcados

ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 29 / 38

Page 30: Operações com Bits

Linguagem CDebug de sistemas embarcados

Tipos de bugs:

BohrbugMandelbug

HeisenbugSchroedinbug

ELT024 Programacao de sistemas embarcados: Operacoes com [email protected] 30 / 38

Page 31: Operações com Bits

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

Page 32: Operações com Bits

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

Page 33: Operações com Bits

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

Page 34: Operações com Bits

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

Page 35: Operações com Bits

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

Page 36: Operações com Bits

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

Page 37: Operações com Bits

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

Page 38: Operações com Bits

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