39 0 240KB
Université de Blida 1 Département d’Electronique ESE Master 2 STR
Année 2018-2019
TP STR N°1 Ordonnancement à priorités fixes et méthode RM On souhaite implémenter et exécuter un jeu de tâches périodiques pour simuler une application temps réel embarquée sur un véhicule automobile. L'application offre des services de navigation (recherche d'itinéraires optimum en temps, en distance, etc). Elle est constituée de trois tâches périodiques indépendantes : 1. La première traite les informations émises par des satellites GPS. Elle est invoquée toutes les 600 ms. Chaque activation nécessite 80 ms de temps processeur. 2. La seconde tâche consulte un gyroscope qui permet d'évaluer la direction prise par l'automobile. Sa période est de 100 ms. Son temps d'exécution est borné par 60 ms. 3. Enfin, la dernière tâche lit le compteur de roues toutes les 300 ms. Cette opération nécessite 60 ms de temps processeur. Questions : 1. On souhaite utiliser la méthode RM (mode préemptif) pour ordonnancer cette application. Associez à chaque tâche une priorité conforme à Rate Monotonic (la plus haute priorité est affectée à la tâche la plus courte). On prendra 1 unité de temps = 10 ms de l'application. Vérifier que l'application est ordonnançable. Toutes les tâches démarrent en même temps. On suppose les échéances égales aux périodes. Dessinez l'ordonnancement généré sur la période d'étude. 2. Etablir l’organigramme puis écrire et compiler le programme vehicule.c. Ce programme simule l'application décrite ci-dessus. Dans un premier temps, affecter la priorité 0 à toutes les tâches. 3. Executer l'application et noter l'ordonnancement généré. Les contraintes temporelles sont elles respectées ? 4. Modifiez le programme vehicule.c de sorte qu'à chaque tâche soit affectée la priorité déterminée par Rate Monotonic. Vous devez affecter des priorités dans la fourchette de valeur de 1 à 99. Exécutez cette application, puis, comparez l'ordonnancement généré par rapport à celui prévu dans la question 1 et celui généré dans la question 3. Que constatez vous ? Dans un premier temps les unités de temps sont générées par des compteurs, puis une fois l’algorithme d’ordonnancement testé, incorporer et programmer un timer (include time.h) que vous devrez appeler pour basculer d’une tâche à une autre comme commandé par l’ordonnanceur.