wiki:SplitMsg2012

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.tsk contenant :

TaskModel(
        'producer',
        ports = { 'output' : MwmrOutput() },
        impls = [
                SwTask('prod_func', # nom de la fonction associée à la tâche
                           stack_size = 2048,
                           sources = ['producer.c']) # nom du fichier source
        ],
        uses = [ 'tty' ]
        )

Créez un fichier consumer.tsk contenant :

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

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 = SRL_GET_MWMR(output);
    char buf[32] = "...World";
    while (1) {
        srl_log_printf(NONE, "Producer : Hello...\n");
        srl_mwmr_write(output, buf, 1);
    }
}

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 = SRL_GET_MWMR(input);
    char buf[32];
    while (1) {
        srl_mwmr_read(input, buf, 1);
        srl_log_printf(NONE, "Consumer : %s\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', 4, 6) # largeur (nombre de mots d'un item) et profondeur (nombre max d'items)

tcg = dsx.Tcg('split_message',
        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.

Note : l'encodage d'un fichier python peut être spécifié en ajoutant la ligne '# -*- coding: <encoding> -*-' à la première ou deuxième ligne du fichier (par exemple '# -*- coding: utf-8 -*-')

Rendez ce fichier exécutable :

$ chmod +x le_nom_de_fichier
Last modified 12 years ago Last modified on Sep 5, 2012, 3:00:10 PM