Changes between Version 3 and Version 4 of SysCom19


Ignore:
Timestamp:
Oct 9, 2019, 6:21:19 AM (5 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SysCom19

    v3 v4  
    2222Pour s'assurer que le module Arduino et la chaîne de compilation sont fonctionnels, vous pouvez  reprendre  l'exemple `blink``
    2323- Brancher le module Arduino avec le câble USB
    24 - lancer : `/opt/arduino-1.6.8/arduino &`
     24- lancer arduino (il y a un raccourci sur le bureau)
    2525- Sélectionner : `Tools -> Boards -> Arduino Duemilanov...` (même si c'est une nano)
    2626- Sélectionner : `Tools -> Processor -> ATmega328`
     
    4545Chaque tâche est représentée deux fonctions `loop_Tache()` et `setup_Tache()`
    4646* La fonction `loop_Tache()` code le comportement de la tâche. Elle es appelée dans la fonction `loop()`.
    47   Dans cet exemple l'application a trois tâches : la tâche 1 est répliquée 2 fois et la tâche 2 n'a
     47  Dans cet exemple l'application a trois tâches : la tâche 1 est répliquée 2 fois et la tâche 2 n'a qu'un réplica.
    4848  {{{#!c
    4949  loop() {
     
    8282* Variables de contexte d'exécution :
    8383  - Enfin chaque réplica de tâche dispose d'une structure contenant son état interne propre,
    84     lequel est conservé entre deux instance d'exécution du réplica de tâche.
     84    lequel est conservé entre deux instances d'exécution du réplica de tâche.
    8585    Le contexte d'exécution représenté par une variable globale du programme sous forme d'une structure.
    8686    Une structure différente est passée en argument de chaque réplica de tâche dans les arguments
     
    137137struct T2_st {...} T2;
    138138 
    139 void setup_T1(struct T1_st *T1, args...) {...} // Déclaration des fonctions setup de tâche
    140 void setup_T2(struct T2_st *T2, args...) {...}
    141 
    142 void loop_T1(struct T1_st *T1, struct mailbox *mb) {
     139void setup_T1(struct T1_st *ctx, args...) {...} // Déclaration des fonctions setup de tâche
     140void setup_T2(struct T2_st *ctx, args...) {...}
     141
     142void loop_T1(struct T1_st *ctx, struct mailbox *mb) {
    143143  if (mb->state != EMPTY) return;              // attend que la mailbox soit vide
    144144  mb->val = 42;
     
    146146}
    147147
    148 void loop_T2(struct T1_st *T1, struct mailbox *mb) {
     148void loop_T2(struct T1_st *ctx, struct mailbox *mb) {
    149149  if (mb->state != FULL) return;               // attend que la mailbox soit pleine
    150150  // usage de mb->val
     
    164164== Gestion des tâches standard périodiques
    165165
    166 Pour les tâches périodiques (elles sont fréquentes), nous pouvons écrire une fonction qui exploite un timer interne du processeur qui s'incrémente chaque microseconde. Cette fonction nommée :
     166Pour les tâches périodiques (elles sont fréquentes), nous pouvons écrire une fonction qui exploite un unique timer interne matériel du processeur qui s'incrémente chaque microseconde. Cette fonction nommée :
    167167{{{#!c
    168168waitFor(int timer, unsigned long period)
    169169}}}
    170 Elle prend deux paramètres `timer` et `period`. Le premier un numéro de timer (il en faudra autant que de tâches périodiques). Le second est une période en microsecondes.
    171 
    172 `wairFor()` peut être appelée aussi souvent que nécessaire, elle rend la valeur 1 une seule fois par période (second paramètre).
     170Elle prend deux paramètres `timer` et `period`. Le premier un numéro de timer logique (il en faudra autant que de tâches périodiques). Le second est une période en microsecondes.
     171
     172`wairFor()` peut être invoquée aussi souvent que nécessaire, elle rend la valeur 1 une seule fois par période (second paramètre).
    173173Si elle n'est pas appelée pendant longtemps alors elle rend le nombre de périodes qui se sont écoulées.
    174 Autrement dit, si dans une tâche vous écrivez `waitFor(12,100)` parce c'est le timer n°12 et que la période est de `100us` et si vous n'exécutez pas la tâche pendant `500us` alors au premier appel après ce délai de 500us `waitFor(12,100)` rendra 5.
    175 
     174Autrement dit, si dans une tâche vous écrivez `waitFor(12,100)` parce c'est le timer logique n°12 et que la période est de `100us` et si vous n'exécutez pas la tâche pendant `500us` alors au premier appel après ce délai de 500us `waitFor(12,100)` rendra 5.
    176175
    177176== Exemple
     
    235234struct Mess_st {
    236235  int timer;                                              // numéro de timer utilisé par WaitFor
    237   unsigned long period;                                             // periode d'affichage
     236  unsigned long period;                                   // periode d'affichage
    238237  char mess[20];
    239238} Mess_t ;