Changes between Initial Version and Version 1 of SplitMsg


Ignore:
Timestamp:
Jun 22, 2011, 6:37:34 PM (13 years ago)
Author:
Joel Porquet
Comment:

Import SplitMsg for TP1

Legend:

Unmodified
Added
Removed
Modified
  • SplitMsg

    v1 v1  
     1= Création de l'exemple SplitMsg =
     2
     3Créez un nouveau répertoire pour l'application (nommé par exemple `'splitmsg'`).
     4
     5== Description des deux tâches ==
     6
     7Dans ce nouveau répertoire, créez un répertoire nommé `'src'` et entrez-y.
     8
     9Créez un fichier `producer.task` contenant :
     10{{{
     11TaskModel(
     12        'producer',
     13        ports = { 'output' : MwmrOutput(32) },
     14        impls = [
     15                SwTask('prod_func',
     16                           stack_size = 2048,
     17                           sources = ['producer.c'])
     18        ] )
     19}}}
     20
     21Créez un fichier `consumer.task` contenant :
     22{{{
     23TaskModel(
     24        'consumer',
     25        ports = { 'input' : MwmrInput(32) },
     26        impls = [
     27                SwTask('cons_func',
     28                           stack_size = 2048,
     29                           sources = ['consumer.c'])
     30        ] )
     31}}}
     32
     33== Implémentation des deux tâches ==
     34
     35Toujours dans le répertoire `'src'`, créez un fichier nommé `'producer.c'`, et saisissez-y le code suivant :
     36
     37{{{
     38#include <srl.h>
     39#include "producer_proto.h"
     40
     41FUNC(prod_func)
     42{
     43        srl_mwmr_t output = GET_ARG(output);
     44        char buf[32] = "...World";
     45        srl_log_printf(NONE, "Producer : Hello...\n");
     46        srl_mwmr_write(output, buf, 32);
     47}
     48}}}
     49
     50Dans un autre fichier nommé `'consumer.c'`, saisissez le code suivant:
     51
     52{{{
     53#include <srl.h>
     54#include "consumer_proto.h"
     55
     56FUNC(cons_func)
     57{
     58        srl_mwmr_t input = GET_ARG(input);
     59        char buf[32];
     60        srl_mwmr_read(input, buf, 32);
     61        srl_log_printf(NONE, "Consumer : %s\n\n", buf);
     62}
     63}}}
     64
     65Bilan : 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`).
     66
     67== Fichier de description DSX/L ==
     68
     69Retournez dans le répertoire de l'application (donc le répertoire parent de `'src'`).
     70
     71Créez un fichier python, pour lequel vous pouvez vous-même choisir un nom (par exemple `'splitmsg.py'`).
     72
     73Ce fichier représente le '''fichier de description DSX''', et sera nommé comme tel par la suite.
     74
     75Saisissez dans ce fichier le texte suivant :
     76
     77{{{
     78#!/usr/bin/env python
     79
     80import dsx
     81
     82# Partie 1 : définition du TCG (Graphe des Tâches et des Communications)
     83
     84fifo0 = dsx.Mwmr('fifo0', 32, 4)
     85
     86tcg = dsx.Tcg(
     87        dsx.Task('prod0', 'producer',
     88                 {'output':fifo0} ),
     89        dsx.Task('cons0', 'consumer',
     90                 {'input':fifo0} ),
     91        )
     92
     93# Partie 2 : génération du code exécutable sur station de travail POSIX
     94
     95tcg.generate(dsx.Posix())
     96}}}
     97
     98Important: La ligne {{{#!/usr/bin/env python}}} doit être la ''première ligne'' du fichier.
     99
     100Rendez ce fichier exécutable :
     101{{{
     102$ chmod +x le_nom_de_fichier
     103}}}