Changes between Version 1 and Version 2 of SujetTP6-2017


Ignore:
Timestamp:
Mar 24, 2017, 7:34:12 AM (8 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SujetTP6-2017

    v1 v2  
    3030- d'exécuter des tâches lorsque des événements surviennent ;
    3131- de mesurer le temps séparant deux événements ;
    32 - de synchroniser l'exécution de 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) ;
     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) ;
    3333- etc.
    3434
     
    3636Dans l'environnement Arduino, la fonction loop() s'exécute en boucle, c'est elle qui va séquencer l'exécution des tâches.
    3737La 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.
     38Les tâches n'ont pas le droit de conserver le processeur sinon cela crée un blocage du système.
    3939La structure générale d'une tâche est la suivante :
    4040
    4141{{{#!c
    42 void tache(arguments) {
     42void Tache(arguments) {
    4343   // test de la condition d'exécution
    4444   if (evement_attendu_absent) return;
     
    4848}}}
    4949
    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érioodiques). Le second est une période en microsecondes.
     50Pour 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.
    5151
    5252`wairFor()` peut être appelée aussi souvent que nécessaire, elle rend 1 une seule fois par période (second paramètre).
    5353Si elle n'est pas appelée pendant longtemps alors elle rend le nombre de périodes qui se sont écoulées.
     54Elle
    5455
    5556Dans l'application suivante nous avons deux tâches périodiques `Led()` et `Mess()`.
     
    6162// --------------------------------------------------------------------------------------------------------------------
    6263
     64// --------------------------------------------------------------------------------------------------------------------
    6365// 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
    6569// arguments :
    6670//  - timer  : numéro de timer entre 0 et MAX_WAIT_FOR_TIMER-1
     
    6872// retour :
    6973//  - nombre de période écoulée depuis le dernier appel
    70 //
    71 #define MAX_WAIT_FOR_TIMER 16
     74// --------------------------------------------------------------------------------------------------------------------
     75#define MAX_WAIT_FOR_TIMER 2
    7276unsigned int waitFor(int timer, unsigned long period){
    7377  static unsigned long waitForTimer[MAX_WAIT_FOR_TIMER];
     
    102106}}}
    103107
     108
    104109== Utilisation de l'écran ==
    105110
     
    116121- Modifier le programme initial pour afficher "bonjour" sur l'Oled toutes les 2 secondes sans changer le comportement de existant.
    117122
     123== Programme demandé ==
     124
     125Vous 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
     127Le 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
     132Le langage est volontairement simple pour que l'interprétation de la commande soit simple.
     133Commencez par les commandes de la LED et quand cela marche ajouter la commande de message.
    118134
    119135
     136
     137