Considérations temps réel et latence
Écrire du code à timing prévisible pour les systèmes temps réel souples et stricts
Considérations temps réel et latence est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que le temps réel ?
Un système temps réel doit répondre dans un délai donné. Le non-respect des échéances entraîne une défaillance :
- Temps réel strict — le dépassement d'une échéance constitue une défaillance du système (médical, avionique)
- Temps réel souple — le dépassement des échéances dégrade la qualité, mais reste toléré (audio, vidéo)
Le déterminisme prime sur la vitesse
Le code temps réel privilégie un temps d'exécution prévisible aux performances maximales. Une fonction qui prend toujours 10 µs est préférable à une fonction qui prend de 1 à 20 µs.
Éviter les allocations sur le tas
Les opérations sur le tas sont imprévisibles : fragmentation et décisions de l'allocateur. Allouez au démarrage, puis réutilisez la mémoire. Les normes de programmation embarquée interdisent souvent new en dehors de l'initialisation.
Éviter les exceptions
Le déclenchement d'une exception a un coût imprévisible. La plupart du code C++ temps réel est compilée avec -fno-exceptions.
Éviter les appels virtuels dans les chemins critiques
Les fonctions virtuelles ajoutent une indirection et peuvent perturber la prédiction des branchements. Utilisez des modèles ou CRTP pour une polymorphie statique.
Le sans-verrou pour le déterminisme
Les verrous peuvent provoquer une inversion de priorité : un thread de faible priorité qui détient un verrou bloque un thread de priorité élevée. Les structures de données sans verrou évitent ce problème.
Atténuer l'inversion de priorité
Si vous devez utiliser des verrous, privilégiez ceux qui prennent en charge l'héritage de priorité : l'OS augmente temporairement la priorité du thread qui détient le verrou.
Temps d'exécution dans le pire cas (WCET)
Analysez le chemin le plus défavorable de votre code. Des outils et une analyse manuelle permettent d'estimer le nombre maximal de cycles qu'une fonction peut prendre. Le WCET guide les décisions d'ordonnancement.
Éviter l'ordonnanceur de l'OS
Pour le temps réel strict, utilisez un RTOS (FreeRTOS, Zephyr, VxWorks) ou une exécution sans système d'exploitation. Les OS généralistes peuvent retarder votre tâche indéfiniment.
Effets du cache et du TLB
Les défauts de cache et du TLB provoquent des blocages imprévisibles. Verrouillez les données dans le cache ou utilisez une RAM scratchpad pour les sections les plus critiques.
Réserves de mémoire
Allouez à partir de réserves prédimensionnées plutôt que du tas général. L'allocation et la libération s'effectuent en temps constant. De nombreux projets C++ embarqués s'appuient exclusivement sur ces réserves.
Profiler sur le matériel réel
Les performances sur une station de travail ont peu de rapport avec celles obtenues sur un MCU. Mesurez toujours les performances sur le matériel cible avec une charge réaliste.
Vérification rapide
Pourquoi les allocations sur le tas posent-elles problème dans le code C++ temps réel ?
Récapitulatif
Le C++ temps réel privilégie la prévisibilité aux performances maximales. Évitez le tas, les exceptions, les appels virtuels et les verrous gérés par l'OS. Utilisez la mémoire statique, les réserves de mémoire et les structures sans verrou, puis analysez le temps d'exécution dans le pire cas. Mesurez les performances sur la cible réelle.
Questions Fréquemment Posées
La leçon « Considérations temps réel et latence » est-elle gratuite ?
Oui — le texte complet de « Considérations temps réel et latence » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Considérations temps réel et latence » ?
Écrire du code à timing prévisible pour les systèmes temps réel souples et stricts Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C++ Academy ?
Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Considérations temps réel et latence » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?
Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Contraintes de l’embarqué : sans RTTI ni exceptions
- IO mappées en mémoire et volatile
- Considérations temps réel et latence
- Compilation croisée pour cibles ARM