1 pontos por GN⁺ 2024-07-07 | 1 comentários | Compartilhar no WhatsApp

Mudando para um RTOS: experiência no RP2040

Martijn Braam

  • Artigo de Martijn Braam, que trabalha com computação
  • Está conduzindo vários projetos com microcontroladores
  • Usa principalmente a placa Raspberry Pi Pico, com uma boa experiência de desenvolvimento

Visão geral do projeto

  • Criação de um controlador de hardware para controlar equipamentos de vídeo
  • Controle de câmeras PTZ e equipamentos de comutação de vídeo
  • Como o controlador existente não tinha bom desempenho, foi necessário criar um novo painel

Design de hardware

  • Inclui 9 botões RGB, joystick analógico e display
  • Uso de módulos de comunicação RS-485 e Ethernet
  • Após várias revisões de hardware, a implementação das funcionalidades foi concluída

Software inicial

  • Começou como um projeto cmake usando o pico-sdk
  • O segundo núcleo foi atribuído ao módulo Wiznet, enquanto o primeiro núcleo cuida do I/O da interface do usuário
  • A complexidade aumentou por ser necessário processar várias tarefas ao mesmo tempo

FreeRTOS

  • Uso do FreeRTOS para processar várias tarefas em paralelo
  • Criação de várias tarefas (Task): botões, LED, rede, DHCP, mDNS, ATEM, VISCA
  • Problemas do FreeRTOS: o sistema travava ao usar printf, além da falta de abstração de hardware

Apache NuttX

  • Fornece um ambiente semelhante a um sistema Unix
  • Após a configuração inicial, é possível usar um shell real
  • Permite configurar o hardware pelo sistema menuconfig/Kconfig
  • As funções básicas não funcionavam por causa de problemas na configuração do barramento i2c
  • Não havia necessidade de caminhos de sistema de arquivos nem de shell

Zephyr

  • Fornece utilitários em Python para configuração do projeto
  • Exige o download de um repositório git de 5 GB
  • Requer a instalação do Zephyr SDK, embora seja possível usar o toolchain ARM existente
  • Suporte insuficiente ao Raspberry Pi Pico, com tentativa de uso de outra placa
  • Mesmo após resolver erros e avisos de build, não funcionou

Conclusão

  • Conseguiu compilar com sucesso algumas aplicações usando FreeRTOS
  • Foi necessário implementar uma alternativa ao printf
  • Pretende continuar usando FreeRTOS para tentar alcançar as funcionalidades desejadas

Resumo do GN⁺

  • Este texto aborda o processo de migração para um RTOS em um projeto com microcontrolador
  • Compara as vantagens e desvantagens de FreeRTOS, Apache NuttX e Zephyr
  • Conclui que o FreeRTOS foi a escolha mais adequada
  • Ajuda a entender os diversos fatores a considerar ao escolher um RTOS
  • Projetos com funcionalidades semelhantes incluem FreeRTOS e Zephyr

1 comentários

 
GN⁺ 2024-07-07
Comentários do Hacker News
  • Parece que este autor espera que um RTOS seja igual ao ambiente do Arduino

    • Muitos projetos Arduino usam mbed ou freertos
    • O Zephyr é fácil de usar e também oferece suporte ao Pi Pico
  • Resumo rápido dos RTOS:

    • FreeRTOS: tem suporte na maioria dos SoCs/dispositivos, mas os drivers variam para cada SoC/dispositivo
    • Zephyr: oferece abstração real de hardware e suporta a maioria dos SoCs
    • NuttX: o suporte não é muito bom, mas quando funciona, é muito legal
  • Instalar uma toolchain para o sistema inteiro do jeito tradicional do UNIX é doloroso

    • Usar Python como ferramenta causa problemas de versão
    • As ferramentas deveriam ser binários estaticamente linkados
  • O PlatformIO está indo na direção certa

    • Ele precisa gerenciar toolchain, SDK, bibliotecas e a configuração do projeto
    • O build deveria ser reproduzível em qualquer lugar
  • Estou migrando projetos com RP2040 para Rust e Embassy

    • Rust é difícil de pegar o jeito, mas é satisfatório
  • O Zephyr dá suporte 100% ao Pi Pico

    • Fico me perguntando se a pessoa não checou a documentação
  • O ThreadX é open source

  • Quero experimentar o Hubris em um projeto real

    • Sofre-se mais com C, mas ele é parecido com Erlang/Elixir
  • Acho que microPython é o caminho mais fácil

    • O multitarefa cooperativa baseada em async/await funciona bem
  • Implementei um temporizador simples de green threads

    • Ele não oferece suporte a gerenciamento real de processos, mas consegue consultar vários sensores e processar sinais
  • FreeRTOS é basicamente o padrão da indústria

  • Rust RTIC oferece suporte ao rp2040 e é bem leve