Baixe o app para aproveitar ainda mais
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
Compartilhar