Até onde o Zephyr RTOS chega com 16 KB de RAM?

Neste artigo, vamos explorar o uso do Zephyr RTOS com o devkit PIC32CM MC00 Curiosity Nano da Microchip. Não pretendemos fazer uma introdução ao Zephyr RTOS, para isso você pode assistir aos webinars Zephyr RTOS: Primeiros passos e Webinar: Zephyr RTOS: Construindo uma Aplicação IoT Completa para entender a montagem do ambiente de build, debug e gravação.

Introdução 


No evento de junho de 2026 do Embarcados, o Seminário de Sistemas Embarcados e IoT,  ganhei uma placa com o microcontrolador PIC32CM1216 diretamente do Rogério Moreira, da Microchip. Um microcontrolador ARM Cortex M0 que conta com apenas 128 KB de Flash e 16 KB de RAM.

No começo da minha carreira, eu já tinha trabalhado na manutenção de código para um produto que contava com um dsPIC33FJ256 (256KB Flash e 30 KB de RAM). Lembro de sofrer bastante para tentar reduzir o consumo de memória. Cada byte, função, arquivo .c/.h ou estrutura mal alinhada contava durante o processo de build.

Porém, os tempos agora mudaram, e fiquei curioso em saber até onde eu poderia chegar usando apenas 16KB de RAM e desenvolver uma aplicação com esse devkit, com o agravante de tentar utilizar Zephyr RTOS também.

Escolhi utilizar o Zephyr RTOS porque ele já tinha suporte à família PIC32CM e aos sensores, protocolo Modbus e display que queria utilizar para esta demo. Este devkit não possui um suporte oficial do Zephyr, então foi preciso criar um custom board out of tree com todos os arquivos dts e overlay para nossa demo.

Demonstração

Para este artigo, criamos uma demo bem simples de monitoramento e controle via Modbus. A ideia foi reunir, em uma única aplicação, os principais periféricos e serviços que normalmente aparecem em um produto embarcado real: sensores, display, expansão de I/O, armazenamento de dados em Flash e comunicação industrial, rodando sobre o Zephyr RTOS.

A placa atua como um dispositivo Modbus RTU (unit id 1, 115200 8N1), exposto através de um adaptador USB‑RS485. Por esse barramento, é possível ler os sensores, acompanhar o estado do sistema e controlar as saídas (LEDs) remotamente. Localmente, um display OLED mostra as informações de operação e quatro teclas permitem interação direta com a aplicação.

Esta demo conta com os seguintes recursos:

  • Modbus RTU
  • Sensores de distância VL53L0X
  • Sensor de temperatura e umidade SHT3x
  • Display OLED SSD1306
  • Shield com expansor I2C MCP23008
    • 4 Leds
    • 4 Teclas
  • RTC Interno
  • Watchdog
  • Armazenamento NVS usando os últimos 16 KB da Flash interna
    • Salva o status do LED ao ligar a placa.
    • Salva a contagem de vezes que à tecla foi pressionada
  • Terminal shell

Conexões elétricas:

PinoFunçãoPeriférico
PA00UART TXConsole shell
PA01UART RX
PA08I²C SDASHT3x, VL53L0X, SSD1306, MCP23008
PA09I²C SCL
PA14UART TXModbus RS-485
PA15UART RXModbus RS-485
PA10GPIO (saída)RS-485 DE/RE
PA02GPIO (saída)RESET do shield IHM
PA03GPIO (entrada)INT do MCP23008
PA22GPIO (entrada)Botão SW0
PA23GPIO (saída)LED0 da placa

Shield com display, 4 teclas e 4 Leds 

Shield com o MCP23008

Placa montada para demo

Gravação e Debug

A placa devkit já conta com um gravador on‑board, o que nos permite tanto gravar quanto depurar o firmware diretamente pelo VSCode, utilizando o plugin Cortex‑Debug. 



Para agilizar o fluxo de trabalho, automatizamos todo o processo dentro do próprio VSCode:

  • Criamos task runners que encapsulam os comandos do west (build, gravação e o servidor GDB), eliminando a necessidade de digitar comandos manualmente no terminal a cada ciclo. 
  • Configuramos um launch de debug que sobe o servidor GDB (via pyOCD) que conecta o Cortex‑Debug à placa, permitindo depuração passo a passo, inspeção de variáveis e breakpoints direto no editor. Com isso, gravar e depurar a aplicação se resume a um clique, tornando o ciclo de desenvolvimento muito mais rápido e produtivo.
Task Runners criadas

Você pode encontrar o código-fonte em: https://github.com/JorgeGzm/PIC32-ArtigoZephyr

Para rodar esta demo, usamos:

  • Ubuntu 24.04
  • Zephyr SDK 1.0.1
  • Zephyr Project v4.4.0

Software Modbus


Para testar e validar a comunicação Modbus, criamos uma aplicação em Python com interface gráfica para monitoramento e controle do device, como: visualizar leituras dos sensores, informações do device, número de vezes que a tecla da placa foi pressionada, ligar e desligar o LED da placa, o tempo de atividade da aplicação (uptime), o valor atual do RTC e rotina de sincronização automática da data e hora do RTC com o relógio do computador.

Software Python criado para demo


Conclusão

Nos últimos anos, passei a trabalhar com microcontroladores mais robustos. No último produto em que atuei, por exemplo, utilizamos um STM32H7 com 2 MB de Flash e 1 MB de RAM internos, além de 32 MB de SDRAM e 16 MB de NOR Flash externas.

Foi surpreendente perceber tudo o que foi possível realizar com um microcontrolador que dispõe de poucos pinos e recursos de memória considerados “limitados” (128 KB de Flash e 16 KB de RAM). A demo foi capaz de executar uma aplicação com Zephyr RTOS, consumindo cerca de 105 KB de Flash (80%) e 13,6 KB de RAM (83%).

Esta demonstração serviu para me lembrar de como os tempos mudaram. A qualidade do código, os níveis de abstração dos drivers e a arquitetura de software para sistemas embarcados evoluíram significativamente.

Como resultado, tornou-se viável considerar microcontroladores mais modestos, como o PIC32CM1216, no desenvolvimento de produtos. Quando combinado ao Zephyr RTOS, ele passa a contar com um ecossistema maduro que oferece suporte a diversos sensores, protocolos de comunicação e funcionalidades prontas para uso, reduzindo o esforço de desenvolvimento e acelerando a criação de soluções embarcadas.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Inscrever-se
Notificar de
0 Comentários
mais recentes
mais antigos Mais votado
Home » Software » Firmware » Até onde o Zephyr RTOS chega com 16 KB de RAM?

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: