Table of Contents
- O modelo de execução do FreeRTOS e o papel das interrupções
- APIs FromISR: por que elas existem e como funcionam
- Comunicação entre ISR e Tasks: qual mecanismo usar e quando
- Prioridades de interrupção no Cortex-M e regras do FreeRTOS
- Boas práticas e padrões arquiteturais para ISR + FreeRTOS
- Erros comuns, sintomas e estratégias de debug em ISR + FreeRTOS
- 7.1 Sintoma: sistema “congela” aleatoriamente
- 7.2 Sintoma: eventos perdidos ou atrasados
- 7.3 Sintoma: jitter elevado em tarefas de controle
- 7.4 Uso de GPIO para análise temporal (técnica profissional)
- 7.5 Assertivas do FreeRTOS: aliadas, não inimigas
- 7.6 Anti-padrões clássicos (resumo rápido)
- 7.7 Mentalidade correta: ISR como fronteira de tempo real
- Conclusão – ISR + FreeRTOS como arquitetura, não como detalhe
Em sistemas embarcados modernos, a combinação entre rotinas de interrupção (ISR – Interrupt Service Routines) e um sistema operacional de tempo real (RTOS – Real-Time Operating System) é praticamente inevitável. Sensores, timers, interfaces de comunicação (UART, SPI, I2C, Ethernet), conversores ADC e eventos externos dependem fortemente de interrupções para garantir baixa latência e previsibilidade. No entanto, quando um RTOS como o FreeRTOS entra em cena, o uso ingênuo de ISRs — comum em sistemas bare-metal — passa a ser uma fonte frequente de bugs, deadlocks, starvation e violações temporais.
O principal motivo é conceitual: uma ISR não é uma task. Ela não participa do escalonamento, não pode bloquear, não possui pilha dinâmica extensa e não deve executar lógica complexa. O papel da ISR em um sistema com RTOS é sinalizar eventos ao sistema, e não processá-los integralmente. O processamento deve ser delegado às tasks, que operam sob o controle do escalonador e respeitam prioridades, tempos de bloqueio e políticas de sincronização.
Outro ponto crítico é que o FreeRTOS é projetado para ser determinístico, mas isso só se mantém se as ISRs respeitarem as regras do kernel. Uma ISR longa demais ou que chame APIs incorretas pode quebrar garantias fundamentais do sistema, como latência máxima de resposta, justiça no escalonamento e previsibilidade temporal — características essenciais em sistemas industriais, médicos e automotivos.
Neste artigo, vamos sair do nível conceitual abstrato e entrar na prática real de ISR + RTOS, cobrindo:
- Como o FreeRTOS enxerga uma interrupção
- Por que existem APIs específicas “FromISR”
- Como sinalizar tasks a partir de ISRs de forma segura
- Quando usar semáforos, filas, notificações e event groups
- Boas práticas arquiteturais e armadilhas comuns
O foco será sempre didático, técnico e aplicável, com exemplos em C para microcontroladores Cortex-M (como STM32), mantendo o rigor exigido por aplicações profissionais.