• Aucun résultat trouvé

TP 14 I.

N/A
N/A
Protected

Academic year: 2022

Partager "TP 14 I."

Copied!
4
0
0

Texte intégral

(1)

Université de Nice Sophia Antipolis Janvier 2006 IUT- Département d’Informatique

TD Architecture 2

TP 14

I. Objectifs :

• Communication entre tâches

• Boîtes à lettre

• Différents mécanisme d’accès aux BAL avec ou sans timeout

II. Rappel :

Communications entre tâches : InitMailBox(IdBL, DimBl);

Send(IdBL, Message);

Receive (IdBL, &Message, Time-out);

TestReceive(IdBl, &Message);

III. Organisation du TD :

A. Communication par Boîte à Lettre

On réalise une communication de type producteur consommateur entre deux tâches. Le consommateur a une priorité plus forte que le producteur. On utilise le compte rendu renvoyé par la primitive Receive.

EX07A.c : Communication par Boîte à Lettre Fonction :

Une première tâche lit des caractères au clavier puis les communique à une deuxième tache qui affiche le caractère reçu. Si aucun caractère n'est reçu au bout d'un certain temps, la tâche de réception affichera un message d'erreur.

Principe :

La tâche de consommation lit la boite à lettre avec un time- out. Si la boîte est remplie avant l'expiration du time-out, alors lire le caractère puis l'afficher. Sinon afficher "Time-Out" dans une troisième fenêtre.

#include "BASEC.H"

#include "STR.H"

#include "VIDEO.H"

#include "TOOLS.C"

#define T1 1

#define T2 2

#define PT1 1

#define PT2 2

(2)

#define BL 1 Word F1,F2, F3;

int Tache1() { Char Msg1;

while (1) {

LireCar(F1,ON,&Msg1);

if (Msg1 == '0') RetDos();

Send(BL, (Word)Msg1);

} }

int Tache2() { Word Msg2;

Word Etat;

while (1) {

Etat = Receive(BL, &Msg2, 50L);

if (Etat == 0) {

EcrCar(F2, (Char)Msg2);

} else {

EcrTexte(F3, "Time-Out");

Tempo(10);

EffaceFen(F3);

} }

}

void main() { InitVideo();

Ecran( "EX01A : Communication par BL");

F1 = OuvreFen( 5,10,25,15, vert, blanc, "Producteur");

F2 = OuvreFen(45,10,65,15, bleu, blanc, "Consommateur");

F3 = OuvreFen(45,16,65,19, rouge,blanc, "Time-out");

InitNoyau();

CreateTask(T1, PT1, Tache1);

CreateTask(T2, PT2, Tache2);

InitMailBox(BL,1);

EnterRegion();

StartTask(T1);

StartTask(T2);

LeaveRegion();

while(TRUE);

}

B. Communication entre tâches :

Une variante de l’exercice précédent car on utilise TestReceive. Il faut faire des essais avec diverses priorités. Montrer également le fonctionnement de DelayTask.

(3)

TP7B.c : Communication par boîte à Lettre

Fonction : Démontrer l'utilisation de TestReceive Principe : Une tâche lit des caractères au clavier et les envoie dans une boîte aux lettres qui est testée par l'autre tâche. Cette tâche lit la boîte et affiche caractères reçus. Si aucun caractère n'est disponible le message BAL VIDE s'affiche.

#include "BASEC.H"

#include "STR.H"

#include "VIDEO.H"

#include "TOOLS.C"

#define T1 1

#define T2 2

#define PT1 1

#define PT2 2

#define BL 1 Word F1,F2, F3;

int Tache1() { Char Msg1;

while (1) {

LireCar(F1,ON,&Msg1);

if (Msg1 == '0') RetDos();

Send(BL,(Word)Msg1);

} }

int Tache2() { Word Msg2;

Word Etat;

static Word Cpt;

while (1) { do{

Etat = TestReceive(BL,&Msg2);

Cpt++;

DelayTask(1);

} while(Etat!=0 && Cpt < 40);

Cpt=0;

if (Etat == 0 /* cOK */) { EcrCar(F2,(Char)Msg2);

}else {

EcrTexte(F3,"BAL vide");

Tempo(10);

EffaceFen(F3);

} }

}

void main() { InitVideo();

Ecran("EX07B : Comm par BL");

F1 = OuvreFen( 5,10,25,15, vert, blanc, "Producteur");

F2 = OuvreFen(45,10,65,15, bleu, blanc, "Consommateur");

F3 = OuvreFen(45,16,65,19, rouge,blanc, "Etat");

InitNoyau();

CreateTask(T1, PT1, Tache1);

(4)

CreateTask(T2, PT2, Tache2);

InitMailBox(BL,1);

EnterRegion();

StartTask(T1);

StartTask(T2);

LeaveRegion();

while(1);

}

C. Variante de TD7B avec passage de l’adresse du message dans la BAL.

Dans la BAL on ne poste plus directement le caractère mais l’adresse d’un tableau dans lequel on a placé un caractère.

Références

Documents relatifs

 Ajuster le bouton « Fréquencemètre » de l’émetteur pour visualiser sur le récepteur un plus grand signal Pour calculer le temps mis par les ultrasons pour aller de

Le conducteur central sert à amener un courant électrique et la tresse extérieure en assure le retour (jouant le rôle de masse).. On considère une ligne de longueur L et

Lorsque les forces qui s’exercent sur un système se compensent alors le vecteur vitesse ne varie pas : ou encore...?. Si le vecteur vitesse d’un système ne varie pas au cours du

Jules l’escargot est au fond d’un puits de 10 mètres de profondeur dont il voudrait bien sortir!. Durant la journée, il monte de 3m et dans la nuit, il redescend

3- Ne cessant d’améliorer notre commande, nous avons constaté qu’un phénomène d’oscillation de l’eau autour d’un niveau provoque de nombreux démarrage et arrêt

Elle est d’autant plus importante que la masse de la charge est grande et s’oppose à la mise en mouvement. Elle est caractérisée par le moment d’inertie J, qui s’exprime en

Les élèves ne disposant pour l’instant que d’informations qualitatives sur l’énergie potentielle et l’énergie cinétique d’un système, le but de

Deux équipes de huit personnes, dont le poids total ne doit pas excéder un poids décidé suivant la catégorie, s'alignent à chaque bout d'une corde. Deux lignes, espacées de huit