1 puntos por GN⁺ 2024-07-07 | 1 comentarios | Compartir por WhatsApp

Transición a un RTOS: la experiencia en el RP2040

Martijn Braam

  • Artículo de Martijn Braam, quien trabaja en temas relacionados con computación
  • Está llevando adelante varios proyectos con microcontroladores
  • Usa principalmente la placa Raspberry Pi Pico y ha tenido una buena experiencia de desarrollo

Resumen del proyecto

  • Creación de un controlador de hardware para manejar equipos de video
  • Control de cámaras PTZ y equipos de conmutación de video
  • Como el rendimiento del controlador existente no era bueno, fue necesario crear un panel nuevo

Diseño de hardware

  • Incluye 9 botones RGB, un joystick analógico y una pantalla
  • Usa módulos de comunicación RS-485 y Ethernet
  • Después de varias revisiones de hardware, se completó la implementación de las funciones

Software inicial

  • Comenzó como un proyecto cmake usando pico-sdk
  • El segundo núcleo se asignó al módulo Wiznet y el primero se encargó del I/O de la interfaz de usuario
  • Aumentó la complejidad por tener que procesar varias tareas al mismo tiempo

FreeRTOS

  • Uso de FreeRTOS para procesar varias tareas en paralelo
  • Creación de múltiples tareas (Task): botones, LED, red, DHCP, mDNS, ATEM, VISCA
  • Problemas de FreeRTOS: el sistema se congela al usar printf y falta de abstracción de hardware

Apache NuttX

  • Ofrece un entorno similar a un sistema Unix
  • Después de la configuración inicial, se puede usar un shell real
  • Permite configurar el hardware mediante el sistema menuconfig/Kconfig
  • Las funciones básicas no operaban por un problema de configuración del bus i2c
  • No se necesitan las rutas del sistema de archivos ni el shell

Zephyr

  • Proporciona una utilidad en Python para la configuración del proyecto
  • Requiere descargar un repositorio git de 5 GB
  • Exige instalar el Zephyr SDK, aunque también se puede usar una toolchain ARM existente
  • El soporte para Raspberry Pi Pico es insuficiente, por lo que se intentó usar otra placa
  • Incluso después de resolver errores y advertencias de compilación, no funcionó

Conclusión

  • Se logró compilar con éxito algunas aplicaciones usando FreeRTOS
  • Hace falta implementar un reemplazo para printf
  • Se intentará seguir usando FreeRTOS para lograr la funcionalidad deseada

Resumen de GN⁺

  • Este artículo trata sobre el proceso de migrar a un RTOS en un proyecto con microcontroladores
  • Compara ventajas y desventajas de FreeRTOS, Apache NuttX y Zephyr
  • Concluye que FreeRTOS es la opción más adecuada
  • Ayuda a entender los distintos factores que conviene considerar al elegir un RTOS
  • Entre proyectos con funciones similares se encuentran FreeRTOS y Zephyr

1 comentarios

 
GN⁺ 2024-07-07
Opiniones de Hacker News
  • Parece que este autor espera que un RTOS sea igual al entorno de Arduino

    • Muchos entornos de Arduino usan mbed o freertos
    • Zephyr es fácil de usar y también soporta Pi Pico
  • Resumen rápido de RTOS:

    • FreeRTOS: tiene soporte en la mayoría de los SOC/dispositivos, pero los drivers varían según cada SOC/dispositivo
    • Zephyr: sí ofrece abstracción real de hardware y soporta la mayoría de los SOC
    • NuttX: no tiene tan buen soporte, pero cuando funciona, es muy bueno
  • Instalar un toolchain para todo el sistema al estilo tradicional de UNIX es un dolor

    • Usar Python como herramienta provoca problemas de versiones
    • Las herramientas deberían ser binarios enlazados estáticamente
  • PlatformIO va en la dirección correcta

    • Debería encargarse del toolchain, el SDK, las librerías y la configuración del proyecto
    • El build debería poder reproducirse en cualquier lugar
  • Estoy migrando un proyecto de RP2040 a Rust y Embassy

    • Rust cuesta trabajo al principio, pero da mucha satisfacción
  • Zephyr soporta Pi Pico al 100%

    • Me hace preguntarme si no revisó la documentación
  • ThreadX es de código abierto

  • Me gustaría probar Hubris en un proyecto real

    • Se sufre más con C, pero es parecido a Erlang/Elixir
  • Creo que microPython es el camino más fácil

    • El multitasking cooperativo basado en async/await funciona bien
  • Implementé un temporizador simple de green threads

    • No soporta gestión real de procesos, pero puede consultar varios sensores y manejar señales
  • FreeRTOS es básicamente el estándar de la industria

  • Rust RTIC soporta rp2040 y es muy ligero