Académique Documents
Professionnel Documents
Culture Documents
FreeRTOS
I- Objectifs :
La figure suivante présente un pont roulant et son montage de simulation avec un STM32. Ce montage autorise
les actions suivantes :
• Marche/arrêt,
• Déplacement vers la gauche/droite du pont et mouvement de Montée/
Descente de la charge.
Butée Droite
Butée Gauche
Les butés gauche et droite sont deux capteurs qui représentent la fin des courses à gauche et à droite.
L'interconnexion du système de commande avec le STM32 est donnée par la figure suivante.
La spécification du montage de simulation est donnée par l’organigramme suivant ( Page 2).
1
2
On se propose de programmer en C le STM32 en se basant sur l'organigramme du système de la page 2 sans
utiliser le FreeRTOS.
1) Ecrire une fonction permettant la configuration du système?
2) Ecrire la fonction Montee_Descente qui traite la montée et la descente?
3) Ecrire la fonction Gauche_Droite qui traite le mouvement gauche et droite du pont?
4) Ecrire la fonction principale permettant de programmer l'application ?
5) Citer au-moins trois défauts fonctionnels de l'organigramme de la page 2 qui peuvent être résolus par
parallélisme des tâches du Système ?
Pour corriger ces défauts fonctionnels, on va subdiviser les traitements de l'organigramme en 4 tâches: (arrêt
d'urgence, marche/arrêt, montée/descente, mouvement gauche/droite). On utilisera ensuite le FreeRTOS pour
paralléliser les tâches. Les 4 tâches seront spécifiées dans les questions qui suivent.
6) void T1_arret_urgence(void* PvParameters): c'est la tâche la plus prioritaire, elle permet d'arrêter le
système quelque soit son état de fonctionnement et le remettre à zéro par la réinitialisation de tous les
indicateurs Leds. On doit tester l'état du bouton arrêt d'urgence tous les 100 Ticks de FreeRTOS.
Codez en C cette tâche ?
7) void T2_marche_arret (void* PvParameters): c'est une tâche communicante avec toutes les autres
tâches. Elle doit envoyer l'état ON/OFF du bouton Marche/Arrêt aux autres tâches. Ces dernières
n'exécutent les traitements qui y sont alloués que si l'état est ON.
8) void T3_montee_descente (void* PvParameters): Elle reçoit l'état de la tâche T2_marche_arrêt. S'il
est à l'état ON, elle fait appel à la fonction Montee_Descente. Codez en C cette tâche?
9) void T4_gauche_droite (void* PvParameters): Elle reçoit l'état de la tache T2_marche_arrêt. S'il est
à l'état ON elle fait appel à la fonction Gauche_Droite. Codez en C cette tâche?