Eventos, estado e debugging

Separar drivers e aplicação, representar transições e localizar erros por experiências pequenas.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Eventos e responsabilidades

  1. O driver lê registos e recolhe dados.
  2. O descodificador monta scancodes, pacotes e mensagens completos.
  3. A aplicação atualiza o estado.
  4. O módulo gráfico desenha uma fotografia desse estado.

Um byte E0 não é ainda um evento de tecla. O driver não decide se um clique inicia o jogo; a aplicação não precisa de saber a porta do controlador.

No ciclo Minix, recebe, atende todas as máscaras e consome os eventos produzidos antes de voltar a bloquear. Uma variável com o último evento pode perder a sequência; usa filas com limite e política de overflow. Substituir posições absolutas antigas pode ser aceitável, mas descartar cliques ou deltas altera o efeito. Um bit de notificação ativo garante pelo menos um pedido, não um por cada interrupção física; bits de dispositivos diferentes conservam-se quando testas cada máscara com if independente.

Máquina e ordem dos eventos

O estado inclui dados, como posição e ticks, além do enum. Mealy associa saídas a estado e entrada na transição; Moore associa-as ao estado.

Na máquina da lição, cada elemento agrupa tecla e tick e aplica primeiro a tecla e depois o tick ao estado resultante. A fila entre elementos conserva a ordem de chegada: uma tecla posterior não passa à frente de um tick anterior.

Estado anterior e entradasResultado
MENU, Enter e tickInicia JOGO, conta o primeiro tick
JOGO com 1 tick, P e tickPAUSA com 1 tick
PAUSA com 1 tick, P e tickJOGO com 2 ticks

O tick só conta em JOGO e o terceiro tick ativo termina a partida. Se aplicasses o tick antes de P em JOGO, o contador subiria antes da pausa. Usa a mesma ordem em execução, testes e protocolo remoto.

Desenha a um ritmo independente das entradas. A cada dois ticks de 60 Hz obténs 30 frames/s. Carrega XPM e aloca recursos antes do ciclo; mede antes de otimizar, conservando transparência, clipping e pitch.

Recursos e diagnóstico

A inicialização tem um caminho inverso. Se falhar após subscrever timer/teclado e alocar pixmaps, limpa apenas os recursos obtidos, respeitando dependências. O modo só precisa de reposição se foi alterado. Na saída, para novas entradas, repõe configurações, remove subscrições e liberta buffers.

Para depurar:

  1. Conserva a menor sequência que reproduz o erro.
  2. Formula uma hipótese sobre uma operação.
  3. Prevê valores que distinguem causas.
  4. Altera uma causa e repete a mesma entrada.

Se o cursor salta à esquerda, 08 C8 00 distingue delta PS/2 correto, +200, de int8_t incorreto, -56. Se o parser der +200, investiga soma, clipping e desenho; se der -56, corrige a descodificação.

Observa valores nas fronteiras entre módulos. Prints alteram carga e tempo; desaparecer com logging não prova correção. Conserva a sequência como caso de regressão e verifica um caso vizinho.

Simulação C da ordem de eventos.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.