Compte Rendu : TP3 - Ordonnancement avec FreeRTOS
Objectif du TP : Comprendre le fonctionnement du système FreeRTOS, particulièrement la
gestion des tâches en mode préemptif et non préemptif, ainsi que l’impact des priorités et des
délais sur l’exécution.
1. Introduction
Un RTOS (Real Time Operating System) est conçu pour des applications exigeant une
synchronisation précise et une grande fiabilité. Il permet de gérer plusieurs tâches
simultanément en donnant l’illusion d’une exécution parallèle grâce à une planification
efficace. FreeRTOS est un noyau utilisé sur diverses plateformes comme Arduino et STM32.
2. Installation de la bibliothèque
Il existe deux méthodes principales pour intégrer FreeRTOS à l'IDE Arduino :
• Méthode 1 (Gestionnaire de bibliothèques) : Rechercher "FreeRTOS" (par Richard Barry)
dans le menu "Gérer les bibliothèques" et cliquer sur installer.
• Méthode 2 (Fichier ZIP) : Télécharger le fichier [Link] et l'ajouter via le menu
"Croquis" -> "Inclure une bibliothèque" -> "Ajouter la bibliothèque .ZIP".
Une fois installée, la bibliothèque doit être déclarée dans le code avec
#include < Arduino_FreeRTOS.h>
3. Étude du Mode Non Préemptif (configUSE_PREEMPTION = 0)
Dans ce mode, l'ordonnanceur ne force jamais un changement de tâche. Une tâche garde le
contrôle du processeur tant qu’elle ne le libère pas volontairement.
• Coopération obligatoire : Le passage d'une tâche à l'autre ne se fait que si la tâche
active appelle taskYIELD() ou utilise vTaskDelay().
• Impact des priorités : En mode non préemptif, les priorités ont moins d'impact car une
tâche de faible priorité peut bloquer une tâche plus haute tant qu'elle ne cède pas la
main.
4. Étude du Mode Préemptif (configUSE_PREEMPTION = 1)
C'est le mode utilisé dans le programme [Link]. Ici, le système interrompt automatiquement
les tâches selon leur priorité et les signaux d'horloge (ticks).
• Priorité stricte : Le processeur est toujours attribué à la tâche la plus prioritaire prête à
s’exécuter.
• Analyse du code implémenté :
o Tâche 1 (Priorité 1) : Gère la LED1 (Pin 4) avec un cycle de 1000ms.
o Tâche 2 (Priorité 1) : Gère la LED2 (Pin 7) avec un cycle de 10000ms.
o Observation : Bien que les deux tâches aient la même priorité, l'utilisation de
vTaskDelay() permet une alternance fluide car chaque tâche entre en état
"bloqué", laissant le CPU libre pour l'autre.
5. Comparaison des Modes d'Ordonnancement
Le tableau suivant résume les différences majeures observées :
Critère Mode Non Préemptif Mode Préemptif
Ordonnancement Manuel (Coopératif) Automatique
Performance Faible Élevée
Risque Blocage (Famine) Faible
Utilisation Applications simples Systèmes Temps Réel
6. Conclusion
Ce TP a mis en évidence l'importance de la stratégie d'ordonnancement. Le mode préemptif
est essentiel pour les systèmes temps réel car il assure une meilleure gestion des ressources
et une exécution fluide des tâches critiques. Le choix des priorités et l'utilisation correcte des
délais (vTaskDelay) sont les piliers d'un système embarqué fiable et réactif.
Élaboré par:
• Aymen Masmoudi
• Assil Zaouali
• Ahmed Zalfani