Premiers pas avec Xenomai

Image non disponible


précédentsommairesuivant

XI. Étude de cas n° 1 : simulateur GPS

XI-A. Fonctionnalités

Le but de cette application est de simuler un GPS. Elle de type commande/contrôle (ou dans le jargon utilisé ici télécommande (TC)/télémétrie(TM)).

Ce simulateur est intégré dans un environnement de test qui émule d'autres équipements, ses interfaces sont les suivantes :

  • une liaison série RS422 à 9600 bits/s, identique à l'équipement réel (carte PCI Sunix) ;
  • trois sockets de communication dialoguant avec l'application principale de conduite de test : contrôle du dialogue et modification des états internes du GPS, enregistrement traces reçues/émises de l'équipement, évènements (journal de bord).

Xenomai a été choisi afin de respecter les temps de réponse de l'équipement et d'avoir une datation précise dans les mesures télémétriques.

La liaison série utilise le driver RTDM fourni avec Xenomai.

XI-B. Architecture dynamique

XI-B-1. Schéma

Image non disponible

XI-B-2. Justification

XI-B-2-a. Tâche TempsGPS

Rôle : simule l'horloge de bord de l'équipement.

Priorité : 80.

Justification : émulation d'une horloge matérielle.

Type d'activation : asynchrone, périodique 1 Hz.

Variables globales accédées : TuGPS (protégés par sémaphore).

Mode : primary.

XI-B-2-b. Tâche TxTM

Rôle : émet sur le port série les TM générées.

Priorité : 70.

Justification : l'émission des TM est prioritaire sur la génération des TC.

Type d'activation : asynchrone, sur lecture de la file de messages TM_MsgQueue.

Variables globales accédées : TuUTC (protégée par sémaphore).

Mode : primary.

XI-B-2-c. Tâche RxTC

Rôle : réceptionne les TC sur le port série.

Priorité : 60

Justification : la réception des TC prime sur leur traitement.

Type d'activation : asynchrone sur réception sur le port série.

Variables globales accédées : Equipement (protégée par sémaphore).

Mode : primary.

XI-B-2-d. Tâche PerioTM

Rôle : génère les TM périodiques.

Priorité : 50 (Round-robin).

Justification : les deux tâches de production de TM ont la même priorité. La génération est moins prioritaire que le traitement des E/S.

Type d'activation : asynchrone, périodique 1 Hz.

Variables globales accédées : Equipement (protégée par sémaphore).

Message_Ionospheric (protégée par sémaphore).

Message_Ephemesis (protégée par sémaphore).

Message_PVT (protégée par sémaphore).

Message_Almanac (protégée par sémaphore).

ErrorReport (protégée par sémaphore).

TuGPS (protégée par sémaphore).

Mode : primary.

XI-B-2-e. Tâche TraiteTC

Rôle : génère les TM en fonction des TC reçues.

Priorité : 50 (Round-robin).

Justification : les deux tâches de production de TM ont la même priorité. La génération est moins prioritaire que le traitement des E/S.

Type d'activation : asynchrone sur lecture de la file de messages TC_MsgQueue.

Variables globales accédées : Equipement (protégée par sémaphore).

Message_Ionospheric (protégée par sémaphore).

Message_Ephemesis (protégée par sémaphore).

Message_PVT (protégée par sémaphore).

Message_Almanac (protégée par sémaphore).

ErrorReport (protégée par sémaphore).

Mode : primary.

XI-B-2-f. Tâche bvl_GPS

Rôle : communication avec la conduite de test (réception des directives).

Priorité : 20.

Justification : aucune contrainte temps réel. On considère que la terminaison de l'essai (réception d'une directive) est prioritaire sur l'émission des traces.

Type d'activation : asynchrone sur réception d'une directive sur le socket (ou déconnexion).

Variables globales accédées : TuUTC (protégée par sémaphore).

Trace (protégée par sémaphore).

Equipement (protégée par sémaphore).

Message_Ionospheric (protégée par sémaphore).

Mode : secondary.

XI-B-2-g. Tâche JDB

Rôle : enregistrement d'évènements (réception de directives, changements d'état internes...)

Priorité : 10 (Round-robin).

Justification : aucune contrainte temps réel.

Type d'activation : asynchrone sur lecture de la file de messages JDB_MsgQueue.

Variables globales accédées : aucune.

Mode : secondary.

Il n'y a a priori pas de raison de rendre prioritaire l'enregistrement des événements sur les traces, et vice-versa. C'est pourquoi ces deux tâches ont la même priorité et que le round-robin est activé.

XI-B-2-h. Tâche Traces

Rôle : enregistrement des traces.

Priorité : 10 (Round-robin).

Justification : aucune contrainte temps réel.

Type d'activation : asynchrone sur lecture de la file de messages Traces_MsgQueue.

Variables globales accédées : Trace (protégée par sémaphore).

Mode : secondary.

XI-B-2-i. Tâche main

Rôle : attendre la terminaison des tâches.

Priorité : 1.

Justification : déroulement sans impact sur les traitements.

Type d'activation : tâche de fond uniquement active au démarrage à l'arrêt.

Variables globales accédées : aucune.

Mode : secondary.

Généralement les tâches logicielles émulant un comportement matériel (timer, génération de signal...) sont les plus prioritaires de l'architecture.
Les tâches identifiées comme « lentes » sont souvent celles qui enregistrent ou affichent des traces.
Lors de l'affectation initiale des priorités, prévoyez large. Plutôt que 1, 2, 3, 4... préférez 10, 20, 30, 40... en cas d'évolution de la spécification (rajout d'une tâche ou changement de priorité), l'impact sera moins lourd.
Pour le type d'activation, on désigne dans ce document par synchrone une tâche dont l'exécution est déterminée par un évènement (sémaphore libéré toutes les secondes par exemple).
Vous devez toujours veiller à ce que les tâches se terminent proprement. Des problèmes de terminaison indiquent parfois des erreurs de codage.

Les variables globales partagées peuvent être protégées de deux manières :
  • par des sémaphores d'exclusion mutuelle ;
  • par les priorités, à condition que les tâches soient synchrones, c'est-à-dire que l'on maîtrise toujours leur date d'exécution.

XI-B-2-j. Files de messages

Les files de messages sont utilisées pour que des tâches de priorités différentes puissent communiquer.

Dans la mesure du possible, le dimensionnement de chaque file doit être justifié. Cependant, dans la pratique, on considère souvent une taille maximale qui ne sera jamais atteinte.


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+