wiki:SplitMsg

Version 1 (modified by Joel Porquet, 13 years ago) (diff)

Import SplitMsg for TP1

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