Carregando
0xF0Lição 16 de 20

Bits e flags em dispositivos reais

Use máscaras sem sinal para ler e mudar configurações individuais de um dispositivo.

22 min Questionário com 4 perguntas 1 exercício de código
Ao final desta lição, você saberá
  • Ler um valor de oito bits em binário
  • Ligar, desligar e testar um bit sem mudar os outros
  • Explicar por que firmwares e formatos de arquivo compactos usam máscaras

O C muitas vezes conversa com um dispositivo por meio de um registrador: um pequeno grupo de bits em que cada posição tem um significado. Numa placa de sensores fictícia, o bit 0 controla um LED e o bit 2 controla um alarme. Uma máscara seleciona o bit que você quer. Use valores sem sinal nas operações com bits e mantenha os bits não relacionados intactos.

Experimente

Até 15 XP

Programe a placa de sensores

Resolva as três missões de flags. Preveja os oito bits antes de cada clique. O registrador é simulado aqui; nenhum hardware é acessado.

Mission 1: Turn on LED (bit 0).

Pontuação 0/3

A fictional eight-bit device register. Bit 0 controls an LED; bit 2 controls an alarm. The other bits must stay unchanged.

b70
b60
b50
b40
b30
b20
b10
b00

uint8_t flags = 0;

Choose a mask operation to begin.

flags.c
1#include <stdint.h>
2#include <stdio.h>
3
4int main(void) {
5    uint8_t flags = 0;
6    flags |= 1u;                 /* set bit 0 */
7    flags |= 1u << 2;            /* set bit 2 */
8    printf("%u\n", (unsigned)flags);
9    flags &= (uint8_t)~1u;       /* clear bit 0 */
10    printf("%u\n", (unsigned)flags);
11    printf("%s\n", (flags & (1u << 2)) ? "alarm on" : "alarm off");
12    return 0;
13}
Saída
5
4
alarm on

| liga os bits selecionados, & ~mask desliga os bits selecionados e & mask os testa. ^ inverte bits. Deslocamentos como 1u << 2 levam um 1 até o bit 2. Mantenha a quantidade de deslocamento dentro da largura do tipo sem sinal; deslocamentos inválidos são comportamento indefinido. O exercício usa um modelo minúsculo de dispositivo, mas o mesmo padrão aparece em drivers embarcados, cabeçalhos de protocolos e permissões de arquivos.

Principais conclusões

  • Uma máscara seleciona posições de bits sem mexer em flags não relacionadas.

  • Use valores sem sinal e quantidades de deslocamento válidas nas operações com bits.

  • OR liga, AND com uma máscara complementada desliga, AND testa.

Quiz da aula

4 perguntas · aprovação com 3 acertos · até 50 XP

Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.

Pratique: escreva código em C

Estes exercícios rodam de verdade. Escreva o programa, clique em “Executar testes” e leia o que o compilador informa: aprender a ler as mensagens do compilador é metade do aprendizado de C.

Exercício 1

Aplique comandos ao dispositivo

+25 XP

Leia um valor inicial do registrador de 0 a 255 e um comando: LED_ON, ALARM_ON ou LED_OFF. Mude só o bit relevante e imprima o valor decimal final. Por exemplo, 1 ALARM_ON imprime 5.

  • Ligar o alarme, manter o LED
  • Desligar o LED, manter o alarme
  • Ligar o LED, manter os outros bits
main.c
Carregando editor…

Seu código é compilado com gcc 14 (-Wall -Wextra) e executado no Compiler Explorer (godbolt.org), um serviço público gratuito.

Dúvidas sobre esta lição

Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.

Carregando publicações…