wiki:SplitMsg

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
Last modified 13 years ago Last modified on Dec 1, 2010, 6:09:38 PM