Checklist de Boas Práticas — UART como Camada de Transporte
Este checklist pode (e deve) ser usado como ferramenta de revisão antes de considerar uma interface UART “pronta para produção”.
1. Modelo Mental e Arquitetura
- UART é tratada como stream de bytes, não como comandos ou texto
- Transporte, protocolo e aplicação estão claramente separados
- Não existe lógica de negócio dentro da ISR
- O sistema funciona mesmo sem terminal humano conectado
2. Interrupções (ISR)
- ISR é mínima e determinística
- ISR apenas captura bytes e os armazena
- Nenhum parsing,
printf,strcmpou decisão ocorre na ISR - Overrun é detectado ou tratado explicitamente
- Latência máxima da ISR é conhecida
3. Bufferização
- Existe buffer explícito (ring buffer ou DMA)
- Tamanho do buffer foi calculado com base em pior caso
- Política clara quando o buffer enche (descartar, sobrescrever, sinalizar erro)
- Leitura e escrita no buffer são thread-safe
- Buffer é desacoplado do parser
4. Framing
- Existe definição clara de início de frame (SOF)
- Existe definição clara de fim de frame ou tamanho explícito
- Framing permite re-sincronização após erro
- Bytes de controle são escapados ou protegidos
- Parser nunca fica “preso” esperando dados indefinidamente
5. Integridade
- Todo frame possui checksum ou CRC
- CRC é verificado antes de qualquer ação
- Frames inválidos são descartados silenciosamente
- Um único bit errado não causa efeito colateral
- Integridade é validada antes do parsing semântico
6. Parsing Defensivo
- Todo comando valida tamanho esperado
- Todo campo é validado antes de uso
- Valores fora de faixa são rejeitados
- Comandos desconhecidos são ignorados
- Nenhum acesso fora de limites é possível
7. Recuperação e Robustez
- Existem timeouts de recepção
- Parser pode ser resetado sem reset do MCU
- Sistema se recupera após bytes aleatórios no stream
- Erros não exigem power-cycle
- Comunicação pode retomar após falha parcial
8. Perda, Repetição e Ordem
- O sistema tolera perda de pacotes
- Comandos críticos são idempotentes ou numerados
- Duplicatas são detectadas
- Ordem de execução é controlada quando necessário
- ACK/NACK existe quando aplicável
9. Tempo e Determinismo
- Parsing ocorre fora de contexto crítico
- UART não bloqueia tarefas de maior prioridade
- Uso de DMA é considerado quando necessário
- Tempo máximo de processamento por byte é conhecido
- Comunicação não quebra deadlines do sistema
10. Segurança e Confiabilidade
- UART é tratada como interface externa (potencialmente hostil)
- Dados inválidos não causam ações físicas perigosas
- Estados críticos exigem confirmação explícita
- Reset não é estratégia de recuperação
- Logs e diagnósticos existem para falhas de comunicação
11. Testabilidade
- Parser pode ser testado com stream artificial
- Casos de erro são testados (bytes perdidos, invertidos, truncados)
- Frames inválidos fazem parte dos testes
- Comunicação funciona sem terminal humano
- Protocolo é documentado de forma clara
12. Maturidade do Sistema
- O sistema continua funcional sob ruído
- Funciona após horas ou dias de operação contínua
- Atualizações não exigem intervenção manual
- Comunicação é previsível e rastreável
- UART poderia ser substituída por outro meio físico sem mudar o protocolo
Regra Final
Se você remover o terminal serial e o sistema parar de fazer sentido,
então UART ainda está sendo usada comoprintf()e não como transporte.
Esse checklist não é burocracia — é engenharia de sobrevivência.