Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com
bits
Prof.MSc.Rodrigo Maximiano Antunes de Almeida
Universidade Fede...
Linguagem C
Tipos de dados em C
Tipos de dados em C
ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodri...
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...
Linguagem C
Convers˜ao Bin´ario, Decimal, Hexadecimal
Convers˜ao Bin´ario-decimal
Dividir o n´umero por 2
Anotar o valor d...
Linguagem C
Convers˜ao Bin´ario, 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
Val...
Linguagem C
Convers˜ao Bin´ario, Decimal, Hexadecimal
Base Hexadecimal
Possui 16 ”unidades”diferentes.
10 algarismos mais ...
Linguagem C
Convers˜ao Bin´ario, Decimal, Hexadecimal
Dec Bin Hex Dec Bin Hex
0 0000 0 8 1000 8
1 0001 1 9 1001 9
2 0010 2...
Linguagem C
Opera¸c˜oes com bits
Opera¸c˜oes com bits
ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrod...
Linguagem C
Opera¸c˜oes com bits
Opera¸c˜ao l´ogica NOT
A !A
0 1
1 0
ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜...
Linguagem C
Opera¸c˜oes com bits
Declara¸c˜ao L´ogico Bitwise
1 char A = 12;
2 // A = 0b00001100
1 result = ! A ;
2 // r e...
Linguagem C
Opera¸c˜oes com bits
Opera¸c˜ao l´ogica AND
A B A&&B
0 0 0
0 1 0
1 0 0
1 1 1
ELT024 Programa¸c˜ao de sistemas ...
Linguagem C
Opera¸c˜oes com bits
Declara¸c˜ao L´ogico Bitwise
1 char A = 8;
2 // A = 0b00001000
3 char B = 5;
4 // B = 0b0...
Linguagem C
Opera¸c˜oes com bits
Opera¸c˜ao l´ogica OR
A B A||B
0 0 0
0 1 1
1 0 1
1 1 1
ELT024 Programa¸c˜ao de sistemas e...
Linguagem C
Opera¸c˜oes com bits
Declara¸c˜ao L´ogico Bitwise
1 char A = 8;
2 // A = 0b00001000
3 char B = 5;
4 // B = 0b0...
Linguagem C
Opera¸c˜oes com bits
Opera¸c˜ao l´ogica XOR
A B A xor B
0 0 0
0 1 1
1 0 1
1 1 0
ELT024 Programa¸c˜ao de sistem...
Linguagem C
Opera¸c˜oes com bits
Declara¸c˜ao L´ogico Bitwise
1 char A = 8;
2 // A = 0b00001000
3 char B = 5;
4 // B = 0b0...
Linguagem C
Opera¸c˜oes com bits
A opera¸c˜ao shift desloca os bits
Para a esquerda operador <<
Para direita operador >>
´...
Linguagem C
Opera¸c˜oes com bits
Declara¸c˜ao Shift Esquerda Shift Direita
1 char A = 8;
2 // A = 0b00001000
1 result = A ...
Linguagem C
Opera¸c˜oes com bits
Ligar um bit
Criar uma ”m´ascara”cheia de 0 (zeros) e com 1 (um) apenas na
posi¸c˜ao dese...
Linguagem C
Opera¸c˜oes com bits
Desligar um bit
Criar uma ”m´ascara”cheia de 1 (uns) e com 0 (zero) apenas na
posi¸c˜ao d...
Linguagem C
Opera¸c˜oes com bits
Trocar o valor de um bit
Criar uma ”m´ascara”cheia de 0 (zeros) e com 1 (um) apenas na
po...
Linguagem C
Opera¸c˜oes com bits
Verificar o estado de um bit
Criar uma ”m´ascara”cheia de 0 (zeros) e com 1 (um) apenas na...
Linguagem C
Opera¸c˜oes com defines
Opera¸c˜oes com defines
ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bit...
Linguagem C
Opera¸c˜oes com defines
Opera¸c˜ao Bit set
Passo a Passo
1 char bit = 2;
2 char mascara ;
3 mascara = 1 << bit ...
Linguagem C
Opera¸c˜oes com defines
Opera¸c˜ao Bit clear
Passo a Passo
1 char bit = 2;
2 char mascara ;
3 mascara = 1 << bi...
Linguagem C
Opera¸c˜oes com defines
Opera¸c˜ao Bit flip
Passo a Passo
1 char bit = 2;
2 char mascara ;
3 mascara = 1 << bit ...
Linguagem C
Opera¸c˜oes com defines
Opera¸c˜ao Bit test
Passo a Passo
1 char bit = 2;
2 char mascara ;
3 mascara = 1 << bit...
Linguagem C
Debug de sistemas embarcados
Debug de sistemas embarcados
ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c...
Linguagem C
Debug de sistemas embarcados
ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unife...
Linguagem C
Debug de sistemas embarcados
Tipos de bugs:
Bohrbug
Mandelbug
Heisenbug
Schroedinbug
ELT024 Programa¸c˜ao de s...
Linguagem C
Debug de sistemas embarcados
Bohrbug
Bug ”bem comportado”
´E poss´ıvel repetir o bug
N˜ao se altera com observ...
Linguagem C
Debug de sistemas embarcados
Mandelbug
Oposto do Bohrbug
Tem causas extremamente
complicadas
Parece ter compor...
Linguagem C
Debug de sistemas embarcados
Heisenbug
A utiliza¸c˜ao de ferramentas de
debug fazem o bug
desaparecer
Pode est...
Linguagem C
Debug de sistemas embarcados
Schroedinbug
Um programa est´a
funcionando
Ao olhar o c´odigo descobre-se
que ele...
Linguagem C
Debug de sistemas embarcados
Como debugar sistemas embarcados?
Externalizar as informa¸c˜oes
Programa¸c˜ao inc...
Linguagem C
Debug de sistemas embarcados
Externalizar as informa¸c˜oes
Cuidado com overhead
Separar alguns leds apenas par...
Linguagem C
Debug de sistemas embarcados
Programa¸c˜ao incremental
Apenas inserir mais fun¸c˜oes depois de ter uma primeir...
Linguagem C
Debug de sistemas embarcados
Otimiza¸c˜ao de c´odigo
Nunca otimizar se n˜ao for necess´ario
Se achar que ´e ne...
Upcoming SlideShare
Loading in …5
×

Operações com Bits

2,053 views

Published on

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

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,053
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
64
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Operações com Bits

  1. 1. Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bits Prof.MSc.Rodrigo Maximiano Antunes de Almeida Universidade Federal de Itajub´a rodrigomax@unifei.edu.br ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 1 / 38
  2. 2. Linguagem C Tipos de dados em C Tipos de dados em C ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 2 / 38
  3. 3. 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 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 3 / 38
  4. 4. Linguagem 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 ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 4 / 38
  5. 5. Linguagem C Convers˜ao Bin´ario, 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 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 5 / 38
  6. 6. Linguagem 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 ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 6 / 38
  7. 7. Linguagem C Convers˜ao Bin´ario, 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 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 7 / 38
  8. 8. Linguagem C Opera¸c˜oes com bits Opera¸c˜oes com bits ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 8 / 38
  9. 9. Linguagem C Opera¸c˜oes com bits Opera¸c˜ao l´ogica NOT A !A 0 1 1 0 ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 9 / 38
  10. 10. Linguagem C Opera¸c˜oes com bits Declara¸c˜ao L´ogico Bitwise 1 char A = 12; 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 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 10 / 38
  11. 11. Linguagem C Opera¸c˜oes com bits Opera¸c˜ao l´ogica AND A B A&&B 0 0 0 0 1 0 1 0 0 1 1 1 ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 11 / 38
  12. 12. Linguagem C Opera¸c˜oes com bits Declara¸c˜ao L´ogico 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 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 12 / 38
  13. 13. Linguagem C Opera¸c˜oes com bits Opera¸c˜ao l´ogica OR A B A||B 0 0 0 0 1 1 1 0 1 1 1 1 ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 13 / 38
  14. 14. Linguagem C Opera¸c˜oes com bits Declara¸c˜ao L´ogico 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 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 14 / 38
  15. 15. Linguagem C Opera¸c˜oes com bits Opera¸c˜ao l´ogica XOR A B A xor B 0 0 0 0 1 1 1 0 1 1 1 0 ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 15 / 38
  16. 16. Linguagem C Opera¸c˜oes com bits Declara¸c˜ao L´ogico Bitwise 1 char A = 8; 2 // A = 0b00001000 3 char B = 5; 4 // B = 0b00000101 1 // n˜ao 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 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 16 / 38
  17. 17. Linguagem C Opera¸c˜oes com bits A opera¸c˜ao shift desloca os bits Para a esquerda operador << Para direita operador >> ´E necess´ario indicar quantas casas ser˜ao deslocadas ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 17 / 38
  18. 18. Linguagem C Opera¸c˜oes com bits Declara¸c˜ao 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 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 18 / 38
  19. 19. Linguagem C Opera¸c˜oes com bits Ligar um bit Criar uma ”m´ascara”cheia de 0 (zeros) e com 1 (um) apenas na posi¸c˜ao desejada Fazer uma opera¸c˜ao OR entre a vari´avel e a m´ascara Posi¸c˜ao N . . . X+1 X X-1 . . . 0 Valor 0 . . . 0 1 0 . . . 0 ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 19 / 38
  20. 20. Linguagem C Opera¸c˜oes com bits Desligar um bit Criar uma ”m´ascara”cheia de 1 (uns) e com 0 (zero) apenas na posi¸c˜ao desejada Fazer uma opera¸c˜ao AND entre a vari´avel e a m´ascara Posi¸c˜ao N . . . X+1 X X-1 . . . 0 Valor 1 . . . 1 0 1 . . . 1 ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 20 / 38
  21. 21. Linguagem C Opera¸c˜oes com bits Trocar o valor de um bit Criar uma ”m´ascara”cheia de 0 (zeros) e com 1 (um) apenas na posi¸c˜ao desejada Fazer uma opera¸c˜ao XOR entre a vari´avel e a m´ascara Posi¸c˜ao N . . . X+1 X X-1 . . . 0 Valor 0 . . . 0 1 0 . . . 0 ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 21 / 38
  22. 22. Linguagem C Opera¸c˜oes com bits Verificar o estado de um bit Criar uma ”m´ascara”cheia de 0 (zeros) e com 1 (um) apenas na posi¸c˜ao desejada Fazer uma opera¸c˜ao AND entre a vari´avel e a m´ascara N˜ao atribuir o resultado `a vari´avel Posi¸c˜ao N . . . X+1 X X-1 . . . 0 Valor 0 . . . 0 1 0 . . . 0 ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 22 / 38
  23. 23. Linguagem C Opera¸c˜oes com defines Opera¸c˜oes com defines ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 23 / 38
  24. 24. Linguagem C Opera¸c˜oes com defines Opera¸c˜ao 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 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 24 / 38
  25. 25. Linguagem C Opera¸c˜oes com defines Opera¸c˜ao 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 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 25 / 38
  26. 26. Linguagem C Opera¸c˜oes com defines Opera¸c˜ao 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 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 26 / 38
  27. 27. Linguagem C Opera¸c˜oes com defines Opera¸c˜ao 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 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 27 / 38
  28. 28. Linguagem C Debug de sistemas embarcados Debug de sistemas embarcados ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 28 / 38
  29. 29. Linguagem C Debug de sistemas embarcados ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 29 / 38
  30. 30. Linguagem C Debug de sistemas embarcados Tipos de bugs: Bohrbug Mandelbug Heisenbug Schroedinbug ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 30 / 38
  31. 31. Linguagem C Debug de sistemas embarcados Bohrbug Bug ”bem comportado” ´E poss´ıvel repetir o bug N˜ao se altera com observa¸c˜ao Niels H. D. Bohr ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 31 / 38
  32. 32. Linguagem C Debug de sistemas embarcados Mandelbug Oposto do Bohrbug Tem causas extremamente complicadas Parece ter comportamento ca´otico e indeterminado Benoˆıt B. Mandelbrot ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 32 / 38
  33. 33. Linguagem C Debug de sistemas embarcados Heisenbug A utiliza¸c˜ao de ferramentas de debug fazem o bug desaparecer Pode estar ligado a opera¸c˜oes temporais, paralelismo de fun¸c˜oes Intertravamento e obten¸c˜ao de recursos Werner K. Heisenberg ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 33 / 38
  34. 34. Linguagem C Debug de sistemas embarcados Schroedinbug Um programa est´a funcionando Ao olhar o c´odigo descobre-se que ele n˜ao devia funcionar A partir deste momento o programa para de funcionar Erwin R. J. A. Schr¨odinger ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 34 / 38
  35. 35. Linguagem C Debug de sistemas embarcados Como debugar sistemas embarcados? Externalizar as informa¸c˜oes Programa¸c˜ao incremental Checar poss´ıveis pontos de memory-leak Existe possibilidade de fragmenta¸c˜ao da mem´oria? Otimiza¸c˜ao de c´odigo Reproduzir e isolar o erro ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 35 / 38
  36. 36. Linguagem C Debug de sistemas embarcados Externalizar as informa¸c˜oes Cuidado com overhead Separar alguns leds apenas para debug Enviar sinais via serial apenas se necess´ario Usar um emulador para obter informa¸c˜oes ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 36 / 38
  37. 37. Linguagem C Debug de sistemas embarcados Programa¸c˜ao incremental Apenas inserir mais fun¸c˜oes depois de ter uma primeira vers˜ao funcional Testar ap´os cada altera¸c˜ao do c´odigo Checar poss´ıveis pontos de memory-leak Verificar se cada malloc() possui seu free() Existe possibilidade de fragmenta¸c˜ao da mem´oria? Repensar rotinas que utilizam malloc() e free() demasiadamente ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 37 / 38
  38. 38. Linguagem C Debug de sistemas embarcados Otimiza¸c˜ao de c´odigo Nunca otimizar se n˜ao for necess´ario Se achar que ´e necess´ario utilizar um profiler antes Verificar as otimiza¸c˜oes j´a 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 fun¸c˜oes problem´aticas ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 38 / 38

×