A) Mise en oeuvre sous linux ============================ 1. A faire une seule fois par compte informatique ---------------------------------------------- * A la racine du compte, taper cp .cshrc .tcshrc puis nedit .tcshrc * Ajouter la ligne (dans la partie Linux) : alias sig_init 'source /user/info_lib/signal/Linux/polychronyEnv' et sauvegarder le fichier. 2. A faire une seule fois au de'but de chaque session (ou dans chaque terminal) -------------------------------------------------- * Taper /bin/tcsh (sig_init est de'sormais disponible) sig_init - permet d'utiliser dans la me^me fene^tre terminal les commandes : sig_comp, sig_make, sig_exec, sig_save, sig_wash, sig_redo, sig_data, sig_resu - se passe bien si donne uniquement des messages commencant par %% WARNING %% ou par >>>> use 3. De'roulement pour chaque exercice (prog) sous Linux --------------------------------------------------- * cre'ation d'un sous-re'pertoire particulier pour chaque nouvel exercice Tous les fichiers (prog.SIG, prog.par, R*.dat) doivent e^tre dans ce sous-re'pertoire, et toutes les commandes sig_* doivent e^tre exe'cute'es a` partir de ce sous-re'pertoire. * cre'ation du fichier source : nedit prog.SIG (et e'ventuellement du fichier prog.par --> voir chapitre B) Attention ! Les noms du fichier et du process doivent e^tre identiques a` la majuscule pre`s. * compilation signal -> C : sig_comp prog - lance: la destruction des fichiers d'erreurs (voir ci-dessous) sig -c prog.SIG prog.par (s'il n'y a pas de .par, lance juste sig -c prog.SIG) - ge'ne`re: des fichiers .c et .h - se passe bien si aucun warning ni aucun nouveau fichier .SIG ge'ne're' - peut afficher certaines erreurs de syntaxe que l'on peut retrouver dans le fichier POLYCHRONY_STDERR.log * en cas d'erreur, la compilation ge'ne`re les fichiers: PROG_LIS.SIG et/ou PROG_CYC.SIG et/ou PROG_TRA.SIG et/ou PROG_bDC_TRA.SIG sig_list prog - permet de les visualiser; . regarder les messages d'erreur dans ces fichiers. . quand il n'y a plus d'erreur, passer a` l'e'tape suivante. * compilation C -> exe'cutable : sig_make prog - ne'cessite un re'pertoire contenant les fichiers .c et .h ge'ne're's par sig_comp - lance: cc -o ./prog.x ./prog/*.c -I $sigdir/Signal/lib/C/export -lm - ge'ne`re: des fichiers .o et l'exe'cutable prog.x - la compilation C ne devrait pas produire d'erreur * cre'ation des fichiers de donne'es en entre'e : par exemple: nedit REntree.dat (pour le signal Entree) (plus e'ventuellement des fichiers RC_*.dat --> voir chapitre C) * exe'cution : sig_exec prog - lance ./prog.x - ne'cessite les fichiers R*.dat (RTOP.dat, RCOMMANDE.dat, RTERMINEE.dat pour le veilleur) et e'ventuellement les fichiers RC_*.dat (RC_TOP.dat, RC_COMMANDE.dat, RC_TERMINEE.dat pour le veilleur) - ge'ne`re: les fichiers de sortie W*.dat (WALARME.dat pour le veilleur) * visualisation des fichiers de donne'es en sortie : - par exemple: more WSortie.dat (pour le signal Sortie) (plus e'ventuellement un fichier montrant l'horloge du signal Sortie, par exemple C_Sortie --> WC_Sortie.dat) sig_data prog - permet de visualiser tous les R*.dat sig_resu prog - permet de visualiser tous les W*.dat ATTENTION : uniquement apre`s un sig_save ou sig_redo - pour le veilleur : . Regarder le fichier WALARME.dat . Question: La valeur pre'sente dans ce fichier est certainement bonne (!!!), mais comment connaitre son horloge ? . Re'ponse: Il faut ajouter un signal de sortie concu pour cela : boolean C_ALARME qui devra e^tre faux aux instants ou` ALARME est absent >>> Exercice: e'crire la de'finition de ce signal et ve'rifier WC_ALARME.dat * nettoyage du compte - sig_wash prog ne conserve que le .SIG (+ .par) et les R*.dat - sig_save prog ATTENTION : a` faire avant sig_wash prog ! permet de conserver en plus l'exe'cutable et les W*.dat * re'percuter une petite modification - sig_redo prog . enchai^ne toutes les ope'rations apre`s une modification de prog.SIG ou prog.par sig_comp, sig_make, sig_exec, sig_save, sig_wash . s'il y a des erreurs, refaire sig_comp pour pouvoir visualiser les PROG_*.SIG B) Les parame`tres ================== * Ne pas confondre parame`tre (une seule valeur) et signal d'entre'e (suite de valeurs). * L'ordre des parame`tres n'est pas indiffe'rent. * Cre'er un fichier du me^me nom que le fichier source (.SIG) mais d'extension .par . * Ne cre'er de fichier .par que si le processus a au moins un parame`tre (le fait que des sous-processus aient des parame`tres n'implique pas que le processus en ait !) * La cre'ation du fichier .par doit intervenir avant la compilation. * Modifier le fichier .par oblige a` re-compiler. * Les valeurs des parame`tres doivent e^tre se'pare's par des virgules. C) Fichiers de donne'es / Exe'cution / Fichiers de re'sultats ============================================================= 1. Entre'es monochrones (premiers exercices) -------------------- * Il suffit de cre'er un fichier R*.dat par signal d'entre'e. Les valeurs peuvent e^tre se'pare'es par des espaces et/ou des retours a` la ligne. 2. Entre'es polychrones (exemple du veilleur) -------------------- * En plus des fichiers R*.dat : - RTOP.dat : 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 - RCOMMANDE.dat : 7 8 9 - RTERMINEE.dat : 1 1 1 Ces fichiers ne testent pas TOUS les cas inte'ressants. >>> Exercice: e'crire des tests exhaustifs. * Les signaux d'entre'e n'ayant pas la me^me horloge, il faut pre'ciser leurs horloges respectives dans des fichiers RC_TOP.dat, RC_COMMANDE.dat, et RC_TERMINEE.dat : 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 Explication : a` chaque 1 dans RC_*.dat, on va chercher la valeur suivante dans le fichier R*.dat correspondant ; a` chaque 0 dans RC_*.dat, correspond une absence de valeur. FIN DU MODE D'EMPLOI