Document fait avec Nvu Document made with Nvu




Séquenceur Temps Réel

Instructions
Utilisation
Exemple

Principe

Si le noyau temps réel développé dans ce système permet la gestion de plusieurs tâches à différents niveaux pour la réalisation de programmes plus ou moins complexes, il est souvent suffisant de disposer d'un simple séquenceur de tâches plus facile à mettre au point. De plus, la résolution de 1 milliseconde, nécessaire dans des systèmes rapides comme la surveillance de courant de consommation à la sortie d'un commutateur électronique, n'est pas indispensable dans des systèmes plus lents comme la régulation de la température d'un radiateur électrique se contentant d'une résolution de quelques secondes.

Le principe est donc de fournir un jeu d'instructions complémentaires pour réaliser des fonctions relativement lentes en garantissant plus facilement leur répartition temporelle. Les fonctions sont de simples instructions FORTH dont l'exécution est lancée selon une table gérée par une seule tâche du noyau temps réel. La base de temps est un nombre programmable de milisecondes. Les fonctions sont toutes réalisées au même niveau que la tâche d'appel et exécutées dans un ordre séquentiel déterministe.


Instructions

- SEQUENCE adr

Adresse des variables utilisées par la gestion des séquences

- T_SEQ -

Tâche d'exécution des séquences (niveau de priorité de 32768)
Cette instruction n'existe pas dans le noyau du Micro FORTH en version séquenceur

- SEQ_BEGIN[ -

Début d'une table de séquences

deb_per,nbr_per SEQ_ADD "nom" -

Insertion d'une séquence dans une table de séquences:
"nom" est le nom du mot FORTH qui doit être exécuté
deb_per indique le numéro de la première période d'éxécution
nbr_per indique l'intervalle entre 2 exécutions

- SEQ_END] -

Fin d'une table de séquence


Utilisation

Il faut commencer par définir les différentes instructions à exécuter séquentiellement. Ces instructions ne doivent pas utiiser de paramètres d'entrée et sortie sur la pile des données comme dans le cas de tâche du noyau temps réel sachant qu'elles peuvent être appelées à n'importe quel moment selon le séquencement choisi.

Il faut ensuite construire la table d'appel séquentielle à l'aide de l'instruction "SEQ_ADD" définissant la date du premier appel de chaque instruction ("deb_per") et leur période de répétition ("nbr_per").

Il suffit alors de lancer cette tâche particulière en définissant sa période d'appel en millisecondes. La tâche effectuera périodiquement le balayage de la table de séquence en respectant les paramètres temporels de chaque instruction de manière déterministe.


Exemple

Afin de mieux appréhender les possibilités du séquenceur temps réel, voici un programme simple qui utilise les instructions définies dans cette page:

0 VARIABLE DUREE

: SEQUENCE_10ms
  CR ." Seq. 10 ms " 10 TEMPO
;

: SEQUENCE_20ms
 ." Seq. 20 ms " 20 TEMPO
;

: SEQUENCE_30ms
 ." Seq. 30 ms " 30 TEMPO
;

: SEQUENCE_40ms
 ." Seq. 40 ms " 40 TEMPO
;

: SEQUENCE_50ms
 ." Seq. 50 ms " 50 TEMPO
;

: SEQ_START ( periode en ms --> - )
 SEQ_BEGIN[
  4 1 SEQ_ADD SEQUENCE_10ms
  4 3 SEQ_ADD SEQUENCE_20ms
  4 3 SEQ_ADD SEQUENCE_30ms
  5 3 SEQ_ADD SEQUENCE_40ms
  6 3 SEQ_ADD SEQUENCE_50ms
  SEQ_END]
;

1000 SEQ_START

Il s'agit d'un programme permettant d'exécuter 5 séquences de 10 à 50 ms toutes les secondes selon le chronnogramme suivant:


La copie d'écran suivante montre le déroulement de ce séquenceur à partir du début: