Vous êtes sur la page 1sur 4

Année Universitaire 2019 - 2020

Application 1

Soit une application temps réel qui consiste à envoyer un message et recevoir un accusé de
réception. Le démarrage de cette application est effectué par un bouton de ON/OFF (int
GetWait_Bouton(void)). Le bouton est lié à une tâche « Démarrage » qui lit son état. L’état OFF met
fin à la l’application par contre l’état ON va permettre, à travers une primitive du noyau, de
synchroniser avec une tâche « Envoie » qui va envoyer un message à la tâche « Réception ». Celui-ci
va afficher sur l’écran le message suivant :

Reçu de la tâche « envoie » : Bonjour, 99

La tâche « Réception » va renvoyer à la tâche « Envoie » un accusé de réception. Ce dernier va


afficher le message suivant :

Reçu de la tâche « réception » : De Même Bonjour, 98

La fin de l’application est établie par deux façons :


 L’appuie sur le bouton OFF,
 Décomptage d’une variable jusqu’à elle atteint la valeur ‘0’ (zéro).

Sur l’écran, on va trouver les messages suivants :

Reçu de la tâche « envoie » : Bonjour, 99


Reçu de la tâche « réception » : De Même Bonjour, 98
Reçu de la tâche « envoie » : Bonjour, 97


Reçu de la tâche « envoie » : Bonjour, 1
Reçu de la tâche « réception » : De Même Bonjour, 0
Fin de l’application

1) Faire un schéma fonctionnel de cette application,


2) Programmer cette application sur le noyau A6RMTR (déclarer toutes les variables utilisées),
3) Donner le type d’ordonnanceur à utiliser,
4) Donner les priorités de toutes les tâches.

Sabeur JEMMALI ©, DEI, ENISo 1/4


Année Universitaire 2019 - 2020

Correction Plus: Application 1

/* Enveloppe d’envoie */
+5V typedef struct {
ON
/* En tête du message */
Bouton Header_type header; /* ne change pas*/
Démarrage /* Corps du message */
OFF
int num; /* définir les données à envoyer */
} Env_Mess_Type_Envoie;

RDV

BAL

Envoie Réception

BAL

RES RES
/* Enveloppe de la réception */
typedef struct {
/* En tête du message */
Header_type header; /* ne change pas*/
Ecran
/* Corps du message */
int num; /* définir les données à envoyer */
} Env_Mess_Type_Reception; Res_DOS

Get_Ressource(Res_DOS)
printf(”%s\n”, str);
Release_Ressource();

Sabeur JEMMALI ©, DEI, ENISo 2/4


Année Universitaire 2019 - 2020

Mécanisme du RDV

+5V

ON
Bouton Call_Task(Idt_Envoie, &key, Entry_1, 0);
Démarrage
OFF

RDV
RDV

Accept_Call(&key, Entry_1, 0);


startApp = key;
Envoie Accept_End();

Mécanisme du BAL (Envoie  Réception)

//Obtenir un enveloppe libre //Réception du message par BAL de la tâche Envoie


if (MsgE = Get_Envelope()) != 0) { if (Receive_Message(&MsgR, -1) == _Message) {
MsgE->num = num; //Insert information //Lire l’information
BAL
//Envoie du message par BAL à la tâche Réception sprintf(chr, “ %s”, MsgR->num);
Send_Message(Idt_Reception, MsgE); num = MsgR->num;
… …
} }

BAL

Envoie Réception
Env_Mess_Type_Envoie *MsgE; Env_Mess_Type_Envoie *MsgR;

/* Enveloppe d’envoie */
typedef struct {
/* En tête du message */
Header_type header; /* ne change pas*/
/* Corps du message */
int num; /* définir les données à envoyer */
} Env_Mess_Type_Envoie;

Sabeur JEMMALI ©, DEI, ENISo 3/4


Année Universitaire 2019 - 2020
Mécanisme du BAL (Réception  Envoie)

//Obtenir un enveloppe libre


//Réception du message par BAL de la tache Réception
if (MsgE = Get_Envelope())!=0) {
if (Receive_Message(&MsgR, -1) == _Message) {
num--;
//Lire l’information BAL MsgE->num = num;
sprintf(chr, “ %s”, MsgR->num);
//Envoie du message par BAL à la tache Envoie
num = MsgR->num;
Send_Message(Idt_Envoie, MsgE);


}
}

Envoie Réception
Env_Mess_Type_Reception *MsgR; Env_Mess_Type_Reception *MsgE;

BAL

/* Enveloppe de la réception */
typedef struct {
/* En tête du message */
Header_type header; /* ne change pas*/
/* Corps du message */
int num; /* définir les données à envoyer */
} Env_Mess_Type_Reception;

Mécanisme du RES (Envoie Ecran et Réception  Ecran)



Get_Ressource(Res_DOS)
Get_Ressource(Res_DOS) Envoie Réception
printf(”%s\n”, str);
printf(”%s\n”, str);
Release_Ressource();
Release_Ressource();

RES RES


Get_Ressource(Res_DOS)
Get_Ressource(Res_DOS)
printf(“Fin de l’application\n”);
printf(“Fin de l’application\n”);
Ecran Release_Ressource();
Release_Ressource();

/* Identity of the DOS resource */


#define Res_DOS 1

Sabeur JEMMALI ©, DEI, ENISo 4/4

Vous aimerez peut-être aussi