289 lines
5.3 KiB
Markdown
289 lines
5.3 KiB
Markdown
< [Voltar](chapter-8.md) | [Sumário](table-of-contens.md) | [Adiante](chapter-10.md) >
|
|
|
|
# ⚡ **Eventos e Interrupções**
|
|
|
|
## 1. Visão Geral
|
|
|
|
PROMETEU distingue claramente **execução normal**, **eventos** e **interrupções**.
|
|
|
|
Nada ocorre “fora do tempo”.
|
|
|
|
Nada interrompe o sistema sem custo.
|
|
|
|
Nada acontece sem um ponto bem definido no ciclo de execução.
|
|
|
|
> Eventos são sinais.
|
|
Interrupções são decisões da máquina.
|
|
>
|
|
|
|
Este capítulo define:
|
|
|
|
- o que PROMETEU considera um evento
|
|
- como interrupções são modeladas
|
|
- quando elas podem ocorrer
|
|
- como se relacionam com ciclos, CAP e determinismo
|
|
|
|
---
|
|
|
|
## 2. Filosofia de Eventos em PROMETEU
|
|
|
|
PROMETEU **não utiliza callbacks assíncronos invisíveis**.
|
|
|
|
Todo evento:
|
|
|
|
- é registrado
|
|
- é entregue em momento previsível
|
|
- é tratado dentro do loop principal
|
|
|
|
Esse modelo evita:
|
|
|
|
- concorrência implícita
|
|
- race conditions ocultas
|
|
- efeitos colaterais não determinísticos
|
|
|
|
PROMETEU favorece:
|
|
|
|
> controle explícito sobre reatividade.
|
|
>
|
|
|
|
---
|
|
|
|
## 3. Eventos
|
|
|
|
### 3.1 Definição
|
|
|
|
Um **evento** em PROMETEU é um **sinal lógico** gerado pelo sistema ou pelo programa, que indica que algo ocorreu.
|
|
|
|
Exemplos de eventos:
|
|
|
|
- fim de frame
|
|
- timer expirado
|
|
- troca de estado do sistema
|
|
- erro de execução
|
|
|
|
Eventos **não executam código automaticamente**.
|
|
|
|
Eles apenas **informam**.
|
|
|
|
---
|
|
|
|
### 3.2 Fila de Eventos
|
|
|
|
PROMETEU mantém uma **fila de eventos**:
|
|
|
|
- eventos são enfileirados
|
|
- a fila é processada em ordem
|
|
- o processamento ocorre em pontos definidos do frame
|
|
|
|
Eventos:
|
|
|
|
- não interrompem execução arbitrariamente
|
|
- não executam fora do loop
|
|
|
|
---
|
|
|
|
## 4. Interrupções
|
|
|
|
### 4.1 Definição
|
|
|
|
Uma **interrupção** é um evento especial, tratado pelo sistema como **prioritário**, que pode:
|
|
|
|
- alterar o fluxo normal de execução
|
|
- executar código específico do sistema
|
|
- impactar ciclos e orçamento
|
|
|
|
Interrupções são **raras e explícitas**.
|
|
|
|
---
|
|
|
|
### 4.2 O que NÃO é uma interrupção
|
|
|
|
Em PROMETEU, **não são interrupções**:
|
|
|
|
- input de botão
|
|
- colisões
|
|
- timers comuns
|
|
- lógica de jogo
|
|
|
|
Esses são tratados como **estado ou eventos normais**.
|
|
|
|
---
|
|
|
|
## 5. Tipos de Interrupções em PROMETEU
|
|
|
|
PROMETEU define um conjunto pequeno e bem controlado de interrupções.
|
|
|
|
### 5.1 Interrupção de Frame (VBlank Conceitual)
|
|
|
|
O final de cada frame gera uma **interrupção lógica de sincronização**, responsável por:
|
|
|
|
- swap de framebuffer
|
|
- commit de áudio
|
|
- sincronização de estado
|
|
|
|
Essa interrupção:
|
|
|
|
- ocorre no SYNC
|
|
- tem custo fixo
|
|
- não executa código do usuário
|
|
|
|
---
|
|
|
|
### 5.2 Interrupção de Sistema
|
|
|
|
Gerada por condições excepcionais:
|
|
|
|
- erro fatal de VM
|
|
- violação de memória
|
|
- instrução inválida
|
|
|
|
Resultado:
|
|
|
|
- execução é interrompida
|
|
- estado da VM é preservado
|
|
- relatório detalhado é gerado
|
|
|
|
---
|
|
|
|
### 5.3 Interrupções Temporizadas (Timers)
|
|
|
|
PROMETEU pode oferecer **timers do sistema**, modelados como:
|
|
|
|
- contadores baseados em frames
|
|
- sinais gerados ao atingir zero
|
|
|
|
Timers:
|
|
|
|
- não disparam código automaticamente
|
|
- geram eventos consultáveis
|
|
|
|
Exemplo conceitual:
|
|
|
|
```
|
|
if (timer.expired(T1)) {
|
|
// tratar evento
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 6. Relação entre Eventos, Interrupções e o Loop
|
|
|
|
O fluxo completo pode ser representado assim:
|
|
|
|
```
|
|
FRAME N
|
|
──────────────
|
|
SAMPLEINPUT
|
|
PROCESS EVENTS
|
|
UPDATE
|
|
DRAW
|
|
AUDIO
|
|
INTERRUPT: VBLANK
|
|
SYNC
|
|
──────────────
|
|
```
|
|
|
|
Importante:
|
|
|
|
- eventos são processados antes da lógica principal
|
|
- interrupções ocorrem apenas em pontos seguros
|
|
- nenhuma interrupção ocorre “no meio” de uma instrução
|
|
|
|
---
|
|
|
|
## 7. Custos e Orçamento
|
|
|
|
Eventos e interrupções:
|
|
|
|
- consomem ciclos
|
|
- participam do CAP
|
|
- aparecem na certificação
|
|
|
|
Exemplo de relatório:
|
|
|
|
```
|
|
Frame 18231:
|
|
Event processing:120cycles
|
|
VBlank interrupt:80cycles
|
|
```
|
|
|
|
Nada é gratuito.
|
|
|
|
---
|
|
|
|
## 8. Determinismo e Reprodutibilidade
|
|
|
|
PROMETEU garante:
|
|
|
|
- mesma sequência de eventos → mesmo comportamento
|
|
- interrupções sempre no mesmo ponto do frame
|
|
- timers baseados em frame count, não em tempo real
|
|
|
|
Isso permite:
|
|
|
|
- replays confiáveis
|
|
- debugging preciso
|
|
- certificação justa
|
|
|
|
---
|
|
|
|
## 9. Boas Práticas
|
|
|
|
PROMETEU incentiva:
|
|
|
|
- tratar eventos como dados
|
|
- consultar eventos explicitamente
|
|
- evitar lógica pesada em handlers
|
|
- usar timers em vez de polling excessivo
|
|
|
|
PROMETEU desencoraja:
|
|
|
|
- simular callbacks assíncronos
|
|
- depender de ordem implícita
|
|
- usar eventos como “atalho” para lógica complexa
|
|
|
|
---
|
|
|
|
## 10. Relação com Microcontroladores
|
|
|
|
O modelo reflete MCUs reais:
|
|
|
|
| MCU | PROMETEU |
|
|
| --- | --- |
|
|
| ISR | Interrupção explícita |
|
|
| Loop principal | Loop PROMETEU |
|
|
| Flags | Eventos |
|
|
| Timers | Timers por frame |
|
|
|
|
Mas sem:
|
|
|
|
- concorrência real
|
|
- interrupções imprevisíveis
|
|
|
|
PROMETEU **ensina o conceito**, não o caos.
|
|
|
|
---
|
|
|
|
## 11. Implicações Pedagógicas
|
|
|
|
Este modelo permite ensinar:
|
|
|
|
- diferença entre evento e interrupção
|
|
- sincronização segura
|
|
- controle de fluxo em sistemas reativos
|
|
- impacto de decisões temporais
|
|
|
|
Tudo com **ordem, clareza e mensuração**.
|
|
|
|
---
|
|
|
|
## 12. Resumo
|
|
|
|
- eventos informam, não executam
|
|
- interrupções são raras e controladas
|
|
- nenhuma execução ocorre fora do loop
|
|
- custos são explícitos
|
|
- comportamento é determinístico
|
|
|
|
< [Voltar](chapter-8.md) | [Sumário](table-of-contens.md) | [Adiante](chapter-10.md) > |