You are on page 1of 3

#include<stdio.h> #include<clib.h> #include<time.h> #include<stdlib.h> #include<conio.h> #include<string.

h> #define TASK_STACKSIZE 1024 /* Dfinition de la taille de la pile dans laquell e vont travailler vos tches */ void void void void huge tachec1(void); /* Dclaration des tches que vous allez utiliser */ huge tachec2(void); /* Dclaration des tches que vous allez utiliser */ prendreVerrou (void); /* Prototype de foncion Prendre */ vendreVerrou (void); /* Prototype de foncion Vendre */

/******************************************************************************* ************ */ unsigned int tachec1_stack[TASK_STACKSIZE]; /* Cration de la pile */ unsigned int tachec2_stack[TASK_STACKSIZE]; /* Cration de la pile */ int tachec1ID;/* identifiant de la tache 1*/ int tachec2ID;/* identifiant de la tache2 */ TaskDefBlock tachec1defblock = /* Cration du TIB de la tche */ { tachec1, /* nom de la tche qui sera lance */ {'C','A','D','1'}, /* nom de la tche cod sur 4 caractres */ &tachec1_stack[TASK_STACKSIZE], /* adresse de dbut de la pile */ TASK_STACKSIZE*sizeof(int), /* taille de la pile */ 0, /* attribut de la tche : NE PAS MODIFIER */ 26, /* priorit de la tche */ 10, /* dure en ms avant que la tche ne soit force de rendre le processeur. Si la vale ur est 0, ce n'est pas pris en compte */ 0,0,0,0 /* NE PAS UTILISER */ }; TaskDefBlock tachec2defblock = /* Cration du TIB de la tche */ { tachec2, /* nom de la tche qui sera lance */ {'C','A','D','2'}, /* nom de la tche cod sur 4 caractres */ &tachec2_stack[TASK_STACKSIZE], /* adresse de dbut de la pile */ TASK_STACKSIZE*sizeof(int), /* taille de la pile */ 0, /* attribut de la tche : NE PAS MODIFIER */ 26, /* priorit de la tche */ 10, /* dure en ms avant que la tche ne soit force de rendre le processeur. Si la vale ur est 0, ce n'est pas pris en compte */ 0,0,0,0 /* NE PAS UTILISER */ }; /******************************************************************************* ************ */ int verrou; char *text1 = "Bonjour" ; char *text2 = "salut" ;

int tache1actif = 1; int tache2actif = 1; /* PROGRAMME PRINCIPAL */ int main(void) { short test; short key=0; BIOS_Set_Focus(FOCUS_APPLICATION); re programme */ /* Rserve l'cran pour l'excution de vot

printf("le main demarre\n\n"); /* creation des taches */ /* les paramtres d'entre sont l'identifiant de la tche et son TIB */ test = RTX_Create_Task(&tachec1ID,&tachec1defblock); if(test!=0) { printf("Erreur de creation de la tache aleatoire. Code erreur : %d",tes t); exit(-1); } test = RTX_Create_Task(&tachec2ID,&tachec2defblock); if(test!=0) { printf("Erreur de creation de la tache Minimum. Code erreur : %d",test); exit(-1); } while(key != 'q') { RTX_Sleep_Time(500); if(kbhit()) key = getch(); } tache1actif = 0; tache2actif = 0; RTX_Delete_Task(tachec1ID); RTX_Delete_Task(tachec2ID); printf("\nFini !!!"); BIOS_Set_Focus(FOCUS_BOTH); /* rend l'affichage au systme */ return(0); } /******************************************************************************* ************ */ /* 1 tache */ void huge tachec1(void) { /* CORPS DE LA TACHE */ int i; while(tache1actif) { prendreVerrou(); for (i=0; i< 10; i++) { RTX_Sleep_Time(rand()%1000 ); printf("%c",text1[i]); } vendreVerrou() ; RTX_Sleep_Time(3000 );

printf("\n"); } } /* 2me tache */ void huge tachec2(void) { /* CORPS DE LA TACHE */ int i; while(tache2actif) { prendreVerrou(); for (i=0; i< 10; i++) { RTX_Sleep_Time(rand()%1000); printf("%c",text2[i]); } vendreVerrou() ; RTX_Sleep_Time(3000 ); printf("\n"); } } /******************************************************************************* ************ */ /* fonction vendre */ void prendreVerrou (void) { while(verrou==1); verrou=1; return ; } /* fonction prendre */ void vendreVerrou (void) { verrou=0; return; }