= Création de l'exemple SplitMsg = Créez un nouveau répertoire pour l'application (nommé par exemple `'splitmsg'`). == Description des deux tâches == Dans ce nouveau répertoire, créez un répertoire nommé `'src'` et entrez-y. Créez un fichier `producer.tsk` contenant : {{{ TaskModel( 'producer', ports = { 'output' : MwmrOutput() }, impls = [ SwTask('prod_func', # nom de la fonction associée à la tâche stack_size = 2048, sources = ['producer.c']) # nom du fichier source ], uses = [ 'tty' ] ) }}} Créez un fichier `consumer.tsk` contenant : {{{ TaskModel( 'consumer', ports = { 'input' : MwmrInput() }, impls = [ SwTask('cons_func', stack_size = 2048, sources = ['consumer.c']) ], uses = [ 'tty' ] ) }}} == Implémentation des deux tâches == Toujours dans le répertoire `'src'`, créez un fichier nommé `'producer.c'`, et saisissez-y le code suivant : {{{ #include #include "producer_proto.h" FUNC(prod_func) { srl_mwmr_t output = SRL_GET_MWMR(output); char buf[32] = "...World"; while (1) { srl_log_printf(NONE, "Producer : Hello...\n"); srl_mwmr_write(output, buf, 1); } } }}} Dans un autre fichier nommé `'consumer.c'`, saisissez le code suivant: {{{ #include #include "consumer_proto.h" FUNC(cons_func) { srl_mwmr_t input = SRL_GET_MWMR(input); char buf[32]; while (1) { srl_mwmr_read(input, buf, 1); srl_log_printf(NONE, "Consumer : %s\n", buf); } } }}} Bilan : deux modèles de tâches (décrits dans les fichiers `.task`) sont créés, ainsi que leurs implémentations respectives (décrites dans les fichiers `.c`). == Fichier de description DSX/L == Retournez dans le répertoire de l'application (donc le répertoire parent de `'src'`). Créez un fichier python, pour lequel vous pouvez vous-même choisir un nom (par exemple `'splitmsg.py'`). Ce fichier représente le '''fichier de description DSX''', et sera nommé comme tel par la suite. Saisissez dans ce fichier le texte suivant : {{{ #!/usr/bin/env python import dsx # Partie 1 : définition du TCG (Graphe des Tâches et des Communications) fifo0 = dsx.Mwmr('fifo0', 4, 6) # largeur (nombre de mots d'un item) et profondeur (nombre max d'items) tcg = dsx.Tcg('split_message', dsx.Task('prod0', 'producer', {'output':fifo0} ), dsx.Task('cons0', 'consumer', {'input':fifo0} ), ) # Partie 2 : génération du code exécutable sur station de travail POSIX tcg.generate(dsx.Posix()) }}} Important : La ligne {{{#!/usr/bin/env python}}} doit être la ''première ligne'' du fichier. Note : l'encodage d'un fichier python peut être spécifié en ajoutant la ligne `'# -*- coding: -*-'` à la première ou deuxième ligne du fichier (par exemple `'# -*- coding: utf-8 -*-'`) Rendez ce fichier exécutable : {{{ $ chmod +x le_nom_de_fichier }}}