Changes between Version 1 and Version 2 of SujetTP6-2017
- Timestamp:
- Mar 24, 2017, 7:34:12 AM (8 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SujetTP6-2017
v1 v2 30 30 - d'exécuter des tâches lorsque des événements surviennent ; 31 31 - de mesurer le temps séparant deux événements ; 32 - de synchroniser l'exécution dedeux tâches (une tâche T1 s'exécute et produit des données qui sont récupérées par une tache T2) ;32 - de faire communiquer deux tâches (une tâche T1 s'exécute et produit des données qui sont récupérées par une tache T2) ; 33 33 - etc. 34 34 … … 36 36 Dans l'environnement Arduino, la fonction loop() s'exécute en boucle, c'est elle qui va séquencer l'exécution des tâches. 37 37 La fonction loop() demande donc l'exécution des tâches à tour de rôle. 38 Les tâches n'ont pas le droit de conserver le processeur sinon cel àcrée un blocage du système.38 Les tâches n'ont pas le droit de conserver le processeur sinon cela crée un blocage du système. 39 39 La structure générale d'une tâche est la suivante : 40 40 41 41 {{{#!c 42 void tache(arguments) {42 void Tache(arguments) { 43 43 // test de la condition d'exécution 44 44 if (evement_attendu_absent) return; … … 48 48 }}} 49 49 50 Pour les tâches périodiques, nous pouvons écrire une fonction qui exploite un timer interne du processeur qui s'incrémente chaque microseconde. Cette fonction nommée `waitFor(int timer, unsigned long period)` prend deux paramètres `timer` et `period`. Le premier un numéro de timer (il en faudra autant que de tâches pério odiques). Le second est une période en microsecondes.50 Pour les tâches périodiques, nous pouvons écrire une fonction qui exploite un timer interne du processeur qui s'incrémente chaque microseconde. Cette fonction nommée `waitFor(int timer, unsigned long period)` 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. 51 51 52 52 `wairFor()` peut être appelée aussi souvent que nécessaire, elle rend 1 une seule fois par période (second paramètre). 53 53 Si elle n'est pas appelée pendant longtemps alors elle rend le nombre de périodes qui se sont écoulées. 54 Elle 54 55 55 56 Dans l'application suivante nous avons deux tâches périodiques `Led()` et `Mess()`. … … 61 62 // -------------------------------------------------------------------------------------------------------------------- 62 63 64 // -------------------------------------------------------------------------------------------------------------------- 63 65 // unsigned int waitFor(timer, period) 64 // Timer pour taches périodique 66 // Timer pour taches périodiques 67 // configuration : 68 // - MAX_WAIT_FOR_TIMER : nombre maximum de timers utilisés 65 69 // arguments : 66 70 // - timer : numéro de timer entre 0 et MAX_WAIT_FOR_TIMER-1 … … 68 72 // retour : 69 73 // - nombre de période écoulée depuis le dernier appel 70 // 71 #define MAX_WAIT_FOR_TIMER 1674 // -------------------------------------------------------------------------------------------------------------------- 75 #define MAX_WAIT_FOR_TIMER 2 72 76 unsigned int waitFor(int timer, unsigned long period){ 73 77 static unsigned long waitForTimer[MAX_WAIT_FOR_TIMER]; … … 102 106 }}} 103 107 108 104 109 == Utilisation de l'écran == 105 110 … … 116 121 - Modifier le programme initial pour afficher "bonjour" sur l'Oled toutes les 2 secondes sans changer le comportement de existant. 117 122 123 == Programme demandé == 124 125 Vous allez reprendre le programme ci-dessus qui fait clignoter la LED et afficher un message périodique sur l'écran Oled et le transformer de sorte à modifier son comportement par des commandes envoyé par l'utilisateur depuis le clavier du PC. 126 127 Le programme est en attente d'un commande pour contrôler l'état de la LED et le message affiché sur l'écran Oled. Les commandes pourraient être : 128 - A : met la lED en clignotement. 129 - E : éteint la LED. 130 - P message : change le message affiché sur l'écran. 131 132 Le langage est volontairement simple pour que l'interprétation de la commande soit simple. 133 Commencez par les commandes de la LED et quand cela marche ajouter la commande de message. 118 134 119 135 136 137