Beruflich Dokumente
Kultur Dokumente
Rodrigo Almeida
rodrigomax@unifei.edu.br
Revisao
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
Bit nmero 7 6 5 4 3 2 1 0
Potncia de 2 27 26 25 24 23 22 21 20
Valor em decimal 128 64 32 16 8 4 2 1
Base Hexadecimal
Possui 16 unidadesdiferentes.
10 algarismos mais 6 letras
Facilita escrita de valores binarios
Facil conversao bin-hex
A !A
0 1
1 0
1 result = ~ A ;
2 // result = 243
1 char A = 12 ;
1 result = ! A ; 3 // A = -
2 // A = -
2 // result = 0 0b00001100
0b00001100
4 // r = -
0b11110011
A B A&&B
0 0 0
0 1 0
1 0 0
1 1 1
1 result = A & B ;
1 char A = 8 ; 2 // result = 0
2 // A = - 3 // A = -
1 result = A -
0b00001000 0b00001000
&& B ;
3 char B = 5 ; 4 // B = -
2 // result = 1
4 // B = - 0b00000101
0b00000101 5 // r = -
0b00000000
Operacao logica OR
A B A||B
0 0 0
0 1 1
1 0 1
1 1 1
1 result = A | B ;
1 char A = 8 ; 2 // result = 13
2 // A = - 3 // A = -
1 result = A -
0b00001000 0b00001000
|| B ;
3 char B = 5 ; 4 // B = -
2 // result = 1
4 // B = - 0b00000101
0b00000101 5 // r = -
0b00001101
A B A xor B
0 0 0
0 1 1
1 0 1
1 1 0
1 result = A ^ B ;
1 char A = 8 ; 2 // result = 13
2 // A = - 3 // A = -
0b00001000 1 a o -
// n~ 0b00001000
3 char B = 5 ; existe em C 4 // B = -
4 // B = - 0b00000101
0b00000101 5 // r = -
0b00001101
1 result = A - 1 result = A -
<< 2 ; >> 2 ;
1 char A = 8 ; 2 // result = 32 2 // result = 2
2 // A = - 3 // A = - 3 // A = -
0b00001000 0b00001000 0b00001000
4 // r = - 4 // r = -
0b00100000 0b00000010
memria
Shift Logico
memria
Shift Aritmetico
memria
char before; 7 6 5 4 3 2 1 0
char after; 1 0 1 1 1 0 0 1 before
before = 0xB9;
after = before >> 1;
//after = 0xDC 1 1 0 1 1 1 0 0 after
memria
memria
Ligar um bit
Criar uma mascaracheia de 0 (zeros) e com 1 (um) apenas na
posicao desejada
Fazer uma operacao OR entre a variavel e a mascara
Desligar um bit
Criar uma mascaracheia de 1 (uns) e com 0 (zero) apenas na
posicao desejada
Fazer uma operacao AND entre a variavel e a mascara
Linguagem C
Operacoes com bits
1 char bit = 2 ;
2 char mascara ;
Passo a Passo 3 mascara = 1 << bit ;
4 arg = arg | mascara ;
1 char bit = 2 ;
2 char mascara ;
Passo a Passo 3 mascara = 1 << bit ;
4 arg = arg & ~ mascara ;
1 char bit = 2 ;
2 char mascara ;
Passo a Passo 3 mascara = 1 << bit ;
4 arg = arg ^ mascara ;
1 char bit = 2 ;
2 char mascara ;
Passo a Passo 3 mascara = 1 << bit ;
4 if ( arg & mascara ) { }
Debug
Tipos de bugs:
Bohrbug
Mandelbug
Heisenbug
Schroedinbug
Bohrbug
Bug bem comportado
E possvel repetir o bug
Nao se altera com observacao
Niels H. D. Bohr
Mandelbug
Oposto do Bohrbug
Tem causas extremamente
complicadas
Parece ter comportamento
caotico e indeterminado
Benot B. Mandelbrot
Heisenbug
A utilizacao de ferramentas de
debug fazem o bug
desaparecer
Pode estar ligado a operacoes
temporais, paralelismo de
funcoes
Intertravamento e obtencao
de recursos
Werner K. Heisenberg
Schroedinbug
Um programa esta
funcionando
Ao olhar o codigo descobre-se
que ele nao devia funcionar
A partir deste momento o
programa para de funcionar
Erwin R. J. A.
Schrodinger
Externalizar as informacoes
Cuidado com overhead
Separar alguns leds apenas para debug
Enviar sinais via serial apenas se necessario
Usar um emulador para obter informacoes
Programacao incremental
Apenas inserir mais funcoes depois de ter uma primeira versao funcional
Testar apos cada alteracao do codigo
Checar possveis 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
Otimizacao de codigo
Nunca otimizar se nao for necessario
Se achar que e necessario utilizar um profiler antes
Verificar as otimizacoes 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 funcoes problematicas