Changes between Version 3 and Version 4 of SysCom19
- Timestamp:
- Oct 9, 2019, 6:21:19 AM (6 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SysCom19
v3 v4 22 22 Pour s'assurer que le module Arduino et la chaîne de compilation sont fonctionnels, vous pouvez reprendre l'exemple `blink`` 23 23 - 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) 25 25 - Sélectionner : `Tools -> Boards -> Arduino Duemilanov...` (même si c'est une nano) 26 26 - Sélectionner : `Tools -> Processor -> ATmega328` … … 45 45 Chaque tâche est représentée deux fonctions `loop_Tache()` et `setup_Tache()` 46 46 * 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. 48 48 {{{#!c 49 49 loop() { … … 82 82 * Variables de contexte d'exécution : 83 83 - 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. 85 85 Le contexte d'exécution représenté par une variable globale du programme sous forme d'une structure. 86 86 Une structure différente est passée en argument de chaque réplica de tâche dans les arguments … … 137 137 struct T2_st {...} T2; 138 138 139 void setup_T1(struct T1_st * T1, args...) {...} // Déclaration des fonctions setup de tâche140 void setup_T2(struct T2_st * T2, args...) {...}141 142 void loop_T1(struct T1_st * T1, struct mailbox *mb) {139 void setup_T1(struct T1_st *ctx, args...) {...} // Déclaration des fonctions setup de tâche 140 void setup_T2(struct T2_st *ctx, args...) {...} 141 142 void loop_T1(struct T1_st *ctx, struct mailbox *mb) { 143 143 if (mb->state != EMPTY) return; // attend que la mailbox soit vide 144 144 mb->val = 42; … … 146 146 } 147 147 148 void loop_T2(struct T1_st * T1, struct mailbox *mb) {148 void loop_T2(struct T1_st *ctx, struct mailbox *mb) { 149 149 if (mb->state != FULL) return; // attend que la mailbox soit pleine 150 150 // usage de mb->val … … 164 164 == Gestion des tâches standard périodiques 165 165 166 Pour les tâches périodiques (elles sont fréquentes), nous pouvons écrire une fonction qui exploite un timer internedu processeur qui s'incrémente chaque microseconde. Cette fonction nommée :166 Pour 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 : 167 167 {{{#!c 168 168 waitFor(int timer, unsigned long period) 169 169 }}} 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).170 Elle 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). 173 173 Si 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 174 Autrement 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. 176 175 177 176 == Exemple … … 235 234 struct Mess_st { 236 235 int timer; // numéro de timer utilisé par WaitFor 237 unsigned long period; 236 unsigned long period; // periode d'affichage 238 237 char mess[20]; 239 238 } Mess_t ;