wiki:SplitMsg

Version 14 (modified by alain, 16 years ago) (diff)

--

Création de l'exemple SplitMsg

Allez dans un nouveau répertoire pour y créer des fichiers.

Description des deux tâches

Dans le nouveau répertoire, créez un répertoire 'src' et allez dedans.

Créez un fichier producer.task contenant:

TaskModel(
        'producer',
        ports = { 'output' : MwmrOutput(32) },
        impl = [
                SwTask('prod_func',
                           stack_size = 2048,
                           sources = ['producer.c'])
        ] )

Créez un fichier consumer.task contenant:

TaskModel(
        'consumer',
        ports = { 'input' : MwmrInput(32) },
        impl = [
                SwTask('cons_func',
                           stack_size = 2048,
                           sources = ['consumer.c'])
        ] )

Implémentation des deux tâches

Toujours dans 'src',

dans producer.c, mettez:

#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 consumer.c, mettez:

#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);
}

On vient de créer deux modèles de tâches (décris dans les fichiers .task, et leurs implémentations.

Fichier de description DSX

Revenez dans le répertoire le l'application (donc le répertoire parent de src).

Créez un fichier de description pour DSX, pour celui-ci, choisissez vous-même un nom explicite.

Ce fichier est le fichier de description DSX et sera nommé comme tel par la suite.

Collez dedans le texte suivant:

#!/usr/bin/env python

from dsx import *

# Partie 1 : définition du TCG (Graphe des Tâches et des Communications)

fifo0 = Mwmr('fifo0', 32, 4)

tcg = Tcg(
        Task('prod0', 'producer',
                 {'output':fifo0} ),
        Task('cons0', 'consumer',
                 {'input':fifo0} ),
        )

# Partie 2 : génération du code exécutable sur station de travail POSIX

posix = Posix()
tcg.generate(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