SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

PDF
Microcontroladores PIC - Entradas e saídas Digitais
PDF
Resumo linguagem c para microcontroladores PIC usando MikroC
PDF
Introdução à programação embarcada
PDF
Acesso à memória e registros
PDF
PDF
Codificação segura em C para sistemas embarcados
PDF
Acessando os periféricos de um microcontrolador
ODT
Ref site pic_bom
Microcontroladores PIC - Entradas e saídas Digitais
Resumo linguagem c para microcontroladores PIC usando MikroC
Introdução à programação embarcada
Acesso à memória e registros
Codificação segura em C para sistemas embarcados
Acessando os periféricos de um microcontrolador
Ref site pic_bom

Semelhante a Operações com Bits (20)

PPTX
IES GF - Linguagem de Programação Estruturada - Parte 3
PDF
599026
PDF
Corpo relatorio
PDF
Pic16f628a
PPT
ArqOrgCom.ppt
PPT
PPTX
Microcontroladores PIC.pptx
PPTX
LEON3 e KIT ALTERA.
PDF
Display de 7 segmentos multiplexados
PPT
Curso de Linguagem C
PDF
Apresentação-Jun18-V1.pdf_bresimar_training
PDF
Controladores-logicos-programaveis-clp.pdf
PPTX
02 JAVAEstrutura sequencial (slides).pptx
PDF
SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio B...
PPTX
Conceitos Básicos TRE RS 2015
PDF
Revisão de linguagem C para Sistemas Embarcados
PPTX
Se você é .NET, você é NETDUINO - TDC 2013 - Porto Alegre
PDF
PLM-Summit 2014 | 8-9 abril | Apresentação 03/14 | Clayton Ferraz | GM Brasil
PDF
Aula 08.1 - ALP - Linguagem C (Primeiros passos)
PPSX
Programação em C
IES GF - Linguagem de Programação Estruturada - Parte 3
599026
Corpo relatorio
Pic16f628a
ArqOrgCom.ppt
Microcontroladores PIC.pptx
LEON3 e KIT ALTERA.
Display de 7 segmentos multiplexados
Curso de Linguagem C
Apresentação-Jun18-V1.pdf_bresimar_training
Controladores-logicos-programaveis-clp.pdf
02 JAVAEstrutura sequencial (slides).pptx
SIMD no z13 - Conhecendo as novas funções Vetoriais do Mainframe por Flavio B...
Conceitos Básicos TRE RS 2015
Revisão de linguagem C para Sistemas Embarcados
Se você é .NET, você é NETDUINO - TDC 2013 - Porto Alegre
PLM-Summit 2014 | 8-9 abril | Apresentação 03/14 | Clayton Ferraz | GM Brasil
Aula 08.1 - ALP - Linguagem C (Primeiros passos)
Programação em C
Anúncio

Mais de Rodrigo Almeida (20)

PPTX
Embedded systems design @ defcon 2015
PDF
Embedded systems development Defcon 19
PDF
As diferentes engenharias
PDF
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
PDF
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
PDF
Cryptology - Antônio Lacerda
PDF
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
PDF
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
PDF
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
PDF
Projeto de uma controladora de drivers
PDF
Desenvolvimento de drivers para sistemas embarcados
PDF
Kernel com requisitos temporais
PDF
Kernel cooperativo
PDF
Definição de processos
PDF
Ponteiros de Função
PDF
Conceitos de ponteiros struct e buffers
PDF
Introdução aos sistemas operacionais embarcados
PDF
Segurança de sistemas: invasões, engenharia reversa e análise de virus
PDF
Comunicação serial
PDF
Utilizando um Display de LCD
Embedded systems design @ defcon 2015
Embedded systems development Defcon 19
As diferentes engenharias
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Cryptology - Antônio Lacerda
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...
Projeto de uma controladora de drivers
Desenvolvimento de drivers para sistemas embarcados
Kernel com requisitos temporais
Kernel cooperativo
Definição de processos
Ponteiros de Função
Conceitos de ponteiros struct e buffers
Introdução aos sistemas operacionais embarcados
Segurança de sistemas: invasões, engenharia reversa e análise de virus
Comunicação serial
Utilizando um Display de LCD
Anúncio

Último (19)

PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Custos e liquidação no SAP Transportation Management, TM130 Col18
Aula 18 - Manipulacao De Arquivos python
COBITxITIL-Entenda as diferença em uso governança TI
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Processos na gestão de transportes, TM100 Col18
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Aula04-Academia Heri- Tecnologia Geral 2025
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Apple Pippin Uma breve introdução. - David Glotz
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss

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