1 points par GN⁺ 2024-07-07 | 1 commentaires | Partager sur WhatsApp

Passage à un RTOS : retour d’expérience sur le RP2040

Martijn Braam

  • Article de Martijn Braam, qui travaille sur des projets liés à l’informatique
  • Mène plusieurs projets autour des microcontrôleurs
  • Utilise principalement des cartes Raspberry Pi Pico, avec une bonne expérience de développement

Vue d’ensemble du projet

  • Création d’un contrôleur matériel pour piloter des équipements vidéo
  • Contrôle de caméras PTZ et d’équipements de commutation vidéo
  • Les performances du contrôleur existant étant insuffisantes, il fallait concevoir un nouveau panneau

Conception matérielle

  • Comprend 9 boutons RGB, un joystick analogique et un écran
  • Utilise des modules de communication RS-485 et Ethernet
  • Les fonctionnalités ont été mises en œuvre après plusieurs révisions matérielles

Logiciel initial

  • Démarrage avec un projet cmake utilisant pico-sdk
  • Le deuxième cœur est affecté au module Wiznet, tandis que le premier gère les E/S de l’interface utilisateur
  • La complexité augmente avec la nécessité de traiter plusieurs tâches simultanément

FreeRTOS

  • Utilisation de FreeRTOS pour exécuter plusieurs tâches en parallèle
  • Création de plusieurs tâches (tasks) : boutons, LED, réseau, DHCP, mDNS, ATEM, VISCA
  • Problèmes rencontrés avec FreeRTOS : le système se bloque lors de l’utilisation de printf, manque d’abstraction matérielle

Apache NuttX

  • Fournit un environnement proche d’un système Unix
  • Après la configuration initiale, un vrai shell peut être utilisé
  • Configuration matérielle possible via le système menuconfig/Kconfig
  • Les fonctions de base ne marchaient pas à cause d’un problème de configuration du bus i2c
  • Les chemins du système de fichiers et le shell ne sont pas nécessaires

Zephyr

  • Fournit des utilitaires Python pour la configuration du projet
  • Nécessite le téléchargement d’un dépôt git de 5 Go
  • Exige l’installation du SDK Zephyr, mais il est possible d’utiliser une toolchain ARM existante
  • Prise en charge insuffisante du Raspberry Pi Pico, tentative d’utilisation d’autres cartes
  • Ne fonctionne toujours pas, même après la résolution d’erreurs et d’avertissements de build

Conclusion

  • Certaines applications ont pu être compilées avec FreeRTOS
  • Une implémentation de remplacement pour printf est nécessaire
  • L’auteur va continuer à utiliser FreeRTOS pour essayer d’obtenir les fonctionnalités souhaitées

Résumé de GN⁺

  • Cet article traite du passage à un RTOS dans un projet de microcontrôleur
  • Compare les avantages et inconvénients de FreeRTOS, Apache NuttX et Zephyr
  • Conclut que FreeRTOS est le choix le plus adapté
  • Aide à comprendre les différents éléments à prendre en compte dans le choix d’un RTOS
  • Parmi les projets aux fonctionnalités similaires figurent FreeRTOS et Zephyr

1 commentaires

 
GN⁺ 2024-07-07
Avis Hacker News
  • Cet auteur semble s’attendre à ce qu’un RTOS fonctionne comme dans l’environnement Arduino

    • Beaucoup de cartes Arduino utilisent mbed ou freertos
    • Zephyr est facile à utiliser et prend aussi en charge le Pi Pico
  • Résumé rapide des RTOS :

    • FreeRTOS : pris en charge sur la plupart des SoC/appareils, mais les pilotes diffèrent selon chaque SoC/appareil
    • Zephyr : prend en charge une véritable abstraction matérielle et la plupart des SoC
    • NuttX : la prise en charge n’est pas bonne, mais quand ça fonctionne, c’est vraiment génial
  • Installer une toolchain sur tout le système à la manière UNIX traditionnelle est pénible

    • Utiliser Python comme outil crée des problèmes de version
    • Les outils devraient être des binaires liés statiquement
  • PlatformIO va dans la bonne direction

    • Il faut gérer la toolchain, le SDK, les bibliothèques et la configuration du projet
    • Les builds devraient être reproductibles partout
  • Je suis en train de faire passer un projet RP2040 à Rust et Embassy

    • Rust est difficile à prendre en main, mais satisfaisant
  • Zephyr prend en charge le Pi Pico à 100 %

    • Je me demande s’il n’a pas vérifié la documentation
  • ThreadX est open source

  • J’aimerais essayer Hubris dans un vrai projet

    • C’est plus douloureux en C, mais similaire à Erlang/Elixir
  • Je pense que microPython est une voie plus simple

    • Le multitâche coopératif basé sur async/await fonctionne bien
  • J’ai bricolé un simple timer à green threads

    • Il ne prend pas en charge la vraie gestion des processus, mais il peut interroger divers capteurs et traiter des signaux
  • FreeRTOS est essentiellement le standard de l’industrie

  • Rust RTIC prend en charge rp2040 et est très léger