Académique Documents
Professionnel Documents
Culture Documents
1. FreeRTOS
Mise en œuvre d’un système d’exploitation temps réel : FreeRTOS – Les tâches 1/8
II2 – Informatique embarquée
Il est possible de supprimer la tâche par défaut ou de la remplacer par un nom plus approprié.
Créer 3 tâches : 2 prioritaires pour faire clignoter des leds et une moins prioritaire pour
l’affichage de l’heure.
Mise en œuvre d’un système d’exploitation temps réel : FreeRTOS – Les tâches 2/8
II2 – Informatique embarquée
Générer le code.
Q4. Quel est le code généré par CubeMx en lien avec la création des tâches, notamment dans
freertos.c.
Mise en œuvre d’un système d’exploitation temps réel : FreeRTOS – Les tâches 3/8
II2 – Informatique embarquée
1.3. exercice 1
Créer une tâche se lançant chaque 100 millisecondes pour changer l’état de led1
Créer une tâche se lançant chaque 500 millisecondes pour changer l’état de la led2.
Pour rester plus proche de FreeRTOS, les tâches se mettent en veille grâce à la fonction
vTaskDelay() directement, sans utiliser osDelay().
Une fois le programme en exécution, il est possible d’afficher des fenêtres d’observation de
FreeRTOS : Windows > Show View > Others > FreeRTOS Task List
Mise en œuvre d’un système d’exploitation temps réel : FreeRTOS – Les tâches 4/8
II2 – Informatique embarquée
1.4. Exercice 2
Créer une tâche se lançant chaque 10 millisecondes pour afficher l’heure issue de HTC_get_time.
L’affichage de l’heure utilise 2 structures :
char text[32];
RTC_TimeTypeDef time;
RTC_DateTypeDef date;
Il est nécessaire de lire la date, pour que l’heure soit mise à jour.
HAL_RTC_GetTime(&hrtc, &time, RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc, &date, RTC_FORMAT_BIN);
sprintf(text, "%2u:%02u:%02u", time.Hours, time.Minutes, time.Seconds);
Q8. A l’aide de l’oscilloscope, vérifier si les contraintes temporelles sont bien respectées.
On s’intéresse dans ce programme à des tâches indépendantes. L’utilisation de l’écran se fait via
une mémoire intermédiaire, les fonctions LCD_Display peuvent donc être considérées
indépendantes si elles écrivent dans des espaces différents de l’écran. Les tâches utilisant
l’afficheur doivent avoir une pile de 1024 octets au minimum.
Dans les paramètres de FreeRTOS, dans CubeMX, onglet Include parameters, activer la
fonctionnalité vTaskDelayUntil :
Mise en œuvre d’un système d’exploitation temps réel : FreeRTOS – Les tâches 5/8
II2 – Informatique embarquée
A l’aide de la documentation FreeRTOS, modifier les tâches led pour utiliser vTaskDelayUntil.
Garder les 2 tâches Leds mais avec une période de 500 ms.
Modifier la tâche affichage de l’heure pour la faire durer 40 ms (en ajoutant du calcul), avec
toujours une période de 100 millisecondes pour afficher l’heure issue de HTC_get_time à droite
de l’écran. Allumer une led au début de la boucle et l’éteindre avant la mise en sommeil.
Mise en œuvre d’un système d’exploitation temps réel : FreeRTOS – Les tâches 6/8
II2 – Informatique embarquée
Créer une tâche de durée 25 ms (en ajoutant du calcul) se lançant chaque 80 millisecondes pour
afficher l’heure issue de HTC_get_time à gauche de l’écran. Allumer une led au début de la
boucle et l’éteindre avant la mise en sommeil.
3. Partage de ressources
On décide désormais d’afficher avec une couleur différente les temps de chaque tâche.
La tâche d’affichage 1 dure 4 ms environ, avec une période de 100 ms.
La tâche d’affichage 2 n’a plus de calculs et une période de 7 ms.
Q14. Que constate-t-on ? Expliquer les raisons du problème.
Pour résoudre ce problème, il est possible d’utiliser un MUTEX ou sémaphore binaire (mutex)
pour bloquer l’usage de la ressource. CubeMx assiste à la création du MUTEX. Le guide de
FreeRTOS donne des éléments sur son usage. ( https://www.freertos.org/CreateMutex.html )
Ajouter un mutex pour protéger la partie du code concernant l’afficheur lcd.
Q15. Le problème est-il résolu ? Pourquoi ?
Q16. Mettre un point d’arrêt dans la section protégée de la tâche de moindre priorité. Que
constate-t-on ?
4. Bibliographie
UM1907, User manual, Discovery kit for STM32F7 Series with STM32F746NG MCU sur le site
ST.com
Mise en œuvre d’un système d’exploitation temps réel : FreeRTOS – Les tâches 7/8