Page Personnelle de Vincent Kerhoas
Vincent Kerhoas
Enseignant du Supérieur
Professeur Agrégé
Page Personnelle de Vincent Kerhoas

[STM32] Real Time Operating System (RTOS)

Back                  << Index >>

Le microcontrôleur STM32F411 fait tourner le Système d’Exploitation Temps Réel FreeRTOS.

Définition

Un système d’exploitation (OS) permet entre autres :

Le Multitâche peut être :

Un Système d’exploitation TEMPS REEL (RTOS) n’est pas plus rapide qu’un OS généraliste (plutôt le contraire), mais son utilisation garantit l’exécution d’une tâche ‘à temps’. Cela convient particulièrement à tout système DETERMINISTE (tout doit être prévu dans le code) pour lequel on veut respecter une certaine période d’échantillonage.
A l’inverse un OS généraliste réarrangera l’exécution d’une application en fonction des ressources pour apporter le maximum de confort à l’utilisateur.

Nous utilisons pour notre application FREERTOS avec un multitâche coopératif.
Cet RTOS répond à la norme POSIX, autrement dit les primitives utilisées se retrouvent dans tout RTOS y compris le leader du marché Windriver VxWorks.

Le choix d’un RTOS peut être soumis à l’exigence d’une certification du genre aéronoautique (système CRITIQUE)


Illustration d’un multitâche coopératif

Toute tâche créée devient READY.
La plus prioritaire est alors exécutée par le processeur et devient RUNNING.
Ci cette dernière est interrompue, elle devient soit BLOCKED (attente d’un objet synchronisant) ou SUSPENDED (mise en état d’attente par temporisation ou sleeping).

Le premier exemple ci dessous avec les tâches A et B illustre l’utilisation de la primitive vTaskDelay().

Le problème dans ce premier exemple réside dans le fait qu’on ne saura pas combien de tours de boucle sont réalisés dans B.

Pour préciser à quel endroit du code on veut interrompre ou relancer une tâche on utilise des SEMAPHORES (exemple Tâches C et D).

Cliquer sur la figure ci-dessous:

L’exemple précédent ne permet pas de garantir une certaine période d’échantillonage ; tout s’exécute au rythme d’exécution des instructions (donc très rapidement au regard d’une période d’échantillonage pour un contrôle moteur).

L’exemple ci-dessous fait intervenir un deuxième objet synchronisant : la boîte à messages (QUEUE).
On fait l’hypothèse que le temps d’exécution des instructions est négligeable au regard de la période d’échantillonage.

Il s’agit d’un sémaphore amélioré permettant en plus de transmettre une information d’une tâche à une autre, sans s’encombrer de l’utilisation d’une variable globale avec accès nécessairement contrôlé par un Mutex.

Ce mécanisme est répété toutes les périodes spécifiées dans vTaskDelay.

Cliquer sur la figure ci-dessous:

L’ensemble des primitives proposées par FREERTOS sont décrites à l’adresse suivante : http://www.freertos.org/
A noter que la compréhension des exemples précédents est essentielle pour la suite.


Vérification de la période d’échantillonnage

L’ajout de tâches dans notre programme ne doit pas remettre en cause la mise à jour du rapport cyclique des moteurs tous les Te.

Afin de vérifier cette période, on peut tout simplement mettre à 1 puis à 0 une sortie GPIO en début et en fin de tâche :

main.c

La Broche PB4 est accessible sur le connecteur arduino :


Utilisation d’un Timer

On peut également utiliser un périphérique timer pour imposer une période d’échantillonage ( cf application Commande Vectorielle PMSM )

Attention, la gestion des jetons de semaphores depuis une routine d’interruption nécessite des primitives spécifiques :

main.c

Back                  << Index >>