Je me lance dans un projet de gestion temps réel sur Raspberry Pi 5 en C++. J’ai commencé à faire quelques recherches sur le sujet, mais n’étant pas expert dans le domaine, je suis à la recherche de conseils ou de retours d’expérience sur des projets similaires.
L’idée est de faire de l’acquisition de données en temps réel (état des GPIO, par exemple), de traiter ces données, puis de lancer plusieurs tâches en parallèle en fonction des résultats (faire clignoter une LED, ouvrir une fenêtre, afficher un état, etc.).
Pour l’instant :
J’ai vu qu’il est possible d’utiliser un cœur temps réel « soft », tout en conservant l’OS Raspberry. Je pensais utiliser pthread.h et sched.h pour faire du séquencement de threads, gérer des priorités, lancer des threads à intervalles réguliers et, si nécessaire, allouer un cœur spécifique aux threads critiques.
J’ai également vu qu’il est peut-être possible d’utiliser un cœur temps réel « hard » avec des OS spécialisés (FreeRTOS, etc.), mais je n’ai pas trouvé de projets concrets utilisant cette approche sur le Raspberry Pi 5.
Avez-vous déjà fait du temps réel sur Raspberry Pi 5 ?
Au vu de l’utilisation que vous souhaitez mettre en œuvre, il ne me semble pas que l’utilisation d’un OS temps réél soit impérative. En général les temps de réponse pour la lecture/écriture des ports GPIO est rapide. Le contraintes de temps de réponses viennent plutôt de la programmation ou d’une multitude d’outils qui chargent trop la machine.
Si vous souhaitez vous amuser avec un OS temps réél je vous invite à regarder du coté de FreeRTOS (en validant sur quel PI, il est implémentable). Personnellement je ne connais que de nom, et il me semble que c’est très peu utilisé.
Une autre option serait de regarder la piste des micro-contrôleurs (Arduino, ESP32 ou encore Raspberry PI Pico) où il n’y a plus d’OS mais un programme qui tourne en boucle.
Je vous invite à bien analyser les gains, les contraintes, ainsi que les connaissances nécessaires d’un système temps réél par rapport à un OS standard avant de vous lancer.