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.task contenant :
TaskModel(
        'producer',
        ports = { 'output' : MwmrOutput(32) },
        impls = [
                SwTask('prod_func',
                           stack_size = 2048,
                           sources = ['producer.c'])
        ] )
Créez un fichier consumer.task contenant :
TaskModel(
        'consumer',
        ports = { 'input' : MwmrInput(32) },
        impls = [
                SwTask('cons_func',
                           stack_size = 2048,
                           sources = ['consumer.c'])
        ] )
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 <srl.h>
#include "producer_proto.h"
FUNC(prod_func)
{
        srl_mwmr_t output = GET_ARG(output);
        char buf[32] = "...World";
        srl_log_printf(NONE, "Producer : Hello...\n");
        srl_mwmr_write(output, buf, 32);
}
Dans un autre fichier nommé 'consumer.c', saisissez le code suivant:
#include <srl.h>
#include "consumer_proto.h"
FUNC(cons_func)
{
        srl_mwmr_t input = GET_ARG(input);
        char buf[32];
        srl_mwmr_read(input, buf, 32);
        srl_log_printf(NONE, "Consumer : %s\n\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', 32, 4)
tcg = dsx.Tcg(
        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.
Rendez ce fichier exécutable :
$ chmod +x le_nom_de_fichier
