Vous êtes sur la page 1sur 3

Use FreeRTOS Mutex with Arduino – Avoid Priority

Inversion

1. Problème de l’Inversion de priorités :


L’accès multiple aux ressources partagées doit être effectué en exclusion mutuelle. Mutex
est fourni pour gérer l’accès exclusif à toute ressource partagée.

Cependant, un ordonnancement sous des contraintes de ressources => Problème


d’inversion de priorité

Exemple: soit 4 tâches périodiques triées en ordre de priorité


tel que T4 est la tâche la plus prioritaire (4) et T1 la moins
prioritaire (1)

2. Solution proposée : Héritage de priorités


Le protocole d’Héritage de priorités qui est le plus disponible pour contrer le problème
d’inversion de priorité et il est déjà adopté par le noyau temps réel freeRTOS.

1
 T1 va acquérir temporairement la priorité de T4 (via le mutex Q) car il partage le
même mutex.
 T1 va donc s'exécuter plus vite dans la SC de Q et T4 pourra en bénéficier.
 Il en va de même pour T3 avec le mutex V.

3. Exercice d’application : Ordonnancement avec le protocole héritage de


priorité

Soient 6 tâches T1 à T6 soumises à un ordonnancement de type FIFO à priorité. Dans ce


système, plus la priorité est élevée, plus la tâche est prioritaire (T6 est donc la tâche la plus
prioritaire). Une parenthèse dans la colonne Séquence d’exécution indique que la tâche
possède deux mutex à la fois.

--

Assignation avant la compilation

On vous demande, à partir de la spécification du Tableau, de dessiner la trace d’exécution


en considérant le protocole héritage de priorité, et puis de donner le temps de réponse de la
tâche T6.

4. Pratiquons Mutex de freeRTOS avec ARDUINO :


I. On vous demande, avec le langage d’Arduino, de faire le suivant :
 Créer deux instances d’une même tâche « PrintTask (void *pParamas)»
avec des priorités différentes. Chaque instance est dédiée à afficher des
données (envoyées en paramètre lors de la création) sur le moniteur série
d’Arduino.
 Utiliser un mutex pour garantir un accès de contrôle à cette ressource pour
les deux instances de la tâche.

II. On vous demande maintenant de mettre en place sur la plaque d’expérimentation


deux capteurs : le capteur ‘sonar à ultrason’ (HC-SR04) et le capteur infrarouge

2
(HC-SR501) de mouvement PIR (‘Passive Infrared’). Après la préparation du
montage associé, faisons le suivant :
 La première instance de la tâche « PrintTask (void *pParamas)» devra
afficher sur le moniteur série d’Arduino la distance détectée et ce chaque
(1000/portTICK_PERIOD_MS).
 La deuxième instance de la tâche « PrintTask (void *pParamas)» est
dédiée, chaque (1000/portTICK_PERIOD_MS), à afficher l’état du
capteur PIR : HIGH si un mouvement est détecté, et LOW sinon.

Fonctionnement du capteur infrarouge PIR :

Il possède 3 pins : l’alimentation, la masse et le pin data. Ce pin passera à l’état HIGH,
quand le capteur détectera un mouvement, pendant une durée comprise entre 5s et 2mn
réglable à un des deux potentiomètres situés à l’arrière du capteur, l’autre permettant de régler
la sensibilité de 3 à 7m.

Capteur MOUVEMENT Passif Infrarouge HC-SR501

Vous aimerez peut-être aussi