wiki:SplitMsg

Version 8 (modified by Nicolas Pouillon, 16 years ago) (diff)

Update new DSX/L API

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:

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

Créez un fichier consumer.task contenant:

consumer_model = TaskModel(
        'consumer',
        ports = { 'input' : MwmrInput(32) },
        impl = [
                SwTask('cons_func',
                           stack_size = 1024,
                           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 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 *

# Création du TCG

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

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

# Génération de code

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