SlideShare a Scribd company logo
1 of 38
Download to read offline
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Linguagem C
Debug de sistemas embarcados
ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 29 / 38
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
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
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
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
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
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
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
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
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

More Related Content

Similar to Operações com Bits

IES GF - Linguagem de Programação Estruturada - Parte 3
IES GF - Linguagem de Programação Estruturada - Parte 3 IES GF - Linguagem de Programação Estruturada - Parte 3
IES GF - Linguagem de Programação Estruturada - Parte 3 Ramon Mayor Martins
 
Microcontroladores PIC.pptx
Microcontroladores PIC.pptxMicrocontroladores PIC.pptx
Microcontroladores PIC.pptxfmtpereira
 
Display de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosDisplay de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosRodrigo Almeida
 
02 JAVAEstrutura sequencial (slides).pptx
02 JAVAEstrutura sequencial (slides).pptx02 JAVAEstrutura sequencial (slides).pptx
02 JAVAEstrutura sequencial (slides).pptxwilliam Sarti José
 
SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio B...
SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio B...SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio B...
SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio B...Joao Galdino Mello de Souza
 
Conceitos Básicos TRE RS 2015
Conceitos Básicos TRE RS 2015Conceitos Básicos TRE RS 2015
Conceitos Básicos TRE RS 2015Veonaprovalogo
 
Revisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas EmbarcadosRevisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas EmbarcadosRodrigo Almeida
 
Se você é .NET, você é NETDUINO - TDC 2013 - Porto Alegre
Se você é .NET, você é NETDUINO - TDC 2013 - Porto AlegreSe você é .NET, você é NETDUINO - TDC 2013 - Porto Alegre
Se você é .NET, você é NETDUINO - TDC 2013 - Porto AlegreMarcio Martins
 
PLM-Summit 2014 | 8-9 abril | Apresentação 03/14 | Clayton Ferraz | GM Brasil
PLM-Summit 2014 | 8-9 abril | Apresentação 03/14 | Clayton Ferraz | GM BrasilPLM-Summit 2014 | 8-9 abril | Apresentação 03/14 | Clayton Ferraz | GM Brasil
PLM-Summit 2014 | 8-9 abril | Apresentação 03/14 | Clayton Ferraz | GM BrasilCADWARE-TECHNOLOGY
 
Aula 08.1 - ALP - Linguagem C (Primeiros passos)
Aula 08.1 - ALP - Linguagem C (Primeiros passos)Aula 08.1 - ALP - Linguagem C (Primeiros passos)
Aula 08.1 - ALP - Linguagem C (Primeiros passos)Messias Batista
 
Apostila de montagem e manutenção de computadores emi mario gurgel
Apostila de montagem e manutenção de computadores emi mario gurgelApostila de montagem e manutenção de computadores emi mario gurgel
Apostila de montagem e manutenção de computadores emi mario gurgelPablo Mariano
 
18.ago ruby 09.30_painel casos de sucesso_senai
18.ago ruby 09.30_painel casos de sucesso_senai18.ago ruby 09.30_painel casos de sucesso_senai
18.ago ruby 09.30_painel casos de sucesso_senaiitgfiles
 

Similar to Operações com Bits (20)

IES GF - Linguagem de Programação Estruturada - Parte 3
IES GF - Linguagem de Programação Estruturada - Parte 3 IES GF - Linguagem de Programação Estruturada - Parte 3
IES GF - Linguagem de Programação Estruturada - Parte 3
 
599026
599026599026
599026
 
Corpo relatorio
Corpo relatorioCorpo relatorio
Corpo relatorio
 
Pic16f628a
Pic16f628aPic16f628a
Pic16f628a
 
Arq orgcom (1)
Arq orgcom (1)Arq orgcom (1)
Arq orgcom (1)
 
ArqOrgCom.ppt
ArqOrgCom.pptArqOrgCom.ppt
ArqOrgCom.ppt
 
Microcontroladores PIC.pptx
Microcontroladores PIC.pptxMicrocontroladores PIC.pptx
Microcontroladores PIC.pptx
 
LEON3 e KIT ALTERA.
LEON3 e KIT ALTERA.LEON3 e KIT ALTERA.
LEON3 e KIT ALTERA.
 
Display de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosDisplay de 7 segmentos multiplexados
Display de 7 segmentos multiplexados
 
Curso de Linguagem C
Curso de Linguagem CCurso de Linguagem C
Curso de Linguagem C
 
02 JAVAEstrutura sequencial (slides).pptx
02 JAVAEstrutura sequencial (slides).pptx02 JAVAEstrutura sequencial (slides).pptx
02 JAVAEstrutura sequencial (slides).pptx
 
SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio B...
SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio B...SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio B...
SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio B...
 
Conceitos Básicos TRE RS 2015
Conceitos Básicos TRE RS 2015Conceitos Básicos TRE RS 2015
Conceitos Básicos TRE RS 2015
 
Revisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas EmbarcadosRevisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas Embarcados
 
Se você é .NET, você é NETDUINO - TDC 2013 - Porto Alegre
Se você é .NET, você é NETDUINO - TDC 2013 - Porto AlegreSe você é .NET, você é NETDUINO - TDC 2013 - Porto Alegre
Se você é .NET, você é NETDUINO - TDC 2013 - Porto Alegre
 
PLM-Summit 2014 | 8-9 abril | Apresentação 03/14 | Clayton Ferraz | GM Brasil
PLM-Summit 2014 | 8-9 abril | Apresentação 03/14 | Clayton Ferraz | GM BrasilPLM-Summit 2014 | 8-9 abril | Apresentação 03/14 | Clayton Ferraz | GM Brasil
PLM-Summit 2014 | 8-9 abril | Apresentação 03/14 | Clayton Ferraz | GM Brasil
 
Aula 08.1 - ALP - Linguagem C (Primeiros passos)
Aula 08.1 - ALP - Linguagem C (Primeiros passos)Aula 08.1 - ALP - Linguagem C (Primeiros passos)
Aula 08.1 - ALP - Linguagem C (Primeiros passos)
 
Programação em C
Programação em CProgramação em C
Programação em C
 
Apostila de montagem e manutenção de computadores emi mario gurgel
Apostila de montagem e manutenção de computadores emi mario gurgelApostila de montagem e manutenção de computadores emi mario gurgel
Apostila de montagem e manutenção de computadores emi mario gurgel
 
18.ago ruby 09.30_painel casos de sucesso_senai
18.ago ruby 09.30_painel casos de sucesso_senai18.ago ruby 09.30_painel casos de sucesso_senai
18.ago ruby 09.30_painel casos de sucesso_senai
 

More from Rodrigo Almeida

Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Rodrigo Almeida
 
Embedded systems development Defcon 19
Embedded systems development Defcon 19Embedded systems development Defcon 19
Embedded systems development Defcon 19Rodrigo Almeida
 
As diferentes engenharias
As diferentes engenhariasAs diferentes engenharias
As diferentes engenhariasRodrigo Almeida
 
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Rodrigo Almeida
 
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Rodrigo Almeida
 
Cryptology - Antônio Lacerda
Cryptology - Antônio LacerdaCryptology - Antônio Lacerda
Cryptology - Antônio LacerdaRodrigo Almeida
 
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Rodrigo Almeida
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Rodrigo Almeida
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Rodrigo Almeida
 
Projeto de uma controladora de drivers
Projeto de uma controladora de driversProjeto de uma controladora de drivers
Projeto de uma controladora de driversRodrigo Almeida
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosRodrigo Almeida
 
Kernel com requisitos temporais
Kernel com requisitos temporaisKernel com requisitos temporais
Kernel com requisitos temporaisRodrigo Almeida
 
Definição de processos
Definição de processosDefinição de processos
Definição de processosRodrigo Almeida
 
Conceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersConceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersRodrigo Almeida
 
Introdução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosIntrodução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosRodrigo Almeida
 
Segurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusSegurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusRodrigo Almeida
 
Utilizando um Display de LCD
Utilizando um Display de LCDUtilizando um Display de LCD
Utilizando um Display de LCDRodrigo Almeida
 

More from Rodrigo Almeida (20)

Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015
 
Embedded systems development Defcon 19
Embedded systems development Defcon 19Embedded systems development Defcon 19
Embedded systems development Defcon 19
 
As diferentes engenharias
As diferentes engenhariasAs diferentes engenharias
As diferentes engenharias
 
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
 
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
 
Cryptology - Antônio Lacerda
Cryptology - Antônio LacerdaCryptology - Antônio Lacerda
Cryptology - Antônio Lacerda
 
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
 
Projeto de uma controladora de drivers
Projeto de uma controladora de driversProjeto de uma controladora de drivers
Projeto de uma controladora de drivers
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcados
 
Kernel com requisitos temporais
Kernel com requisitos temporaisKernel com requisitos temporais
Kernel com requisitos temporais
 
Kernel cooperativo
Kernel cooperativoKernel cooperativo
Kernel cooperativo
 
Definição de processos
Definição de processosDefinição de processos
Definição de processos
 
Ponteiros de Função
Ponteiros de FunçãoPonteiros de Função
Ponteiros de Função
 
Conceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersConceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffers
 
Introdução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosIntrodução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcados
 
Segurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusSegurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virus
 
Comunicação serial
Comunicação serialComunicação serial
Comunicação serial
 
Utilizando um Display de LCD
Utilizando um Display de LCDUtilizando um Display de LCD
Utilizando um Display de LCD
 

Operações com Bits

  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Linguagem C Debug de sistemas embarcados ELT024 Programa¸c˜ao de sistemas embarcados: Opera¸c˜oes com bitsrodrigomax@unifei.edu.br 29 / 38
  • 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. 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. 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. 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. 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. 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. 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. 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. 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