Changes between Initial Version and Version 1 of SplitMsg2012


Ignore:
Timestamp:
Aug 27, 2012, 10:48:46 AM (13 years ago)
Author:
meunier
Comment:

Version initiale

Legend:

Unmodified
Added
Removed
Modified
  • SplitMsg2012

    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.sd` contenant :
     10{{{
     11TaskModel(
     12        'producer',
     13        ports = { 'output' : MwmrOutput() },
     14        impls = [
     15                SwTask('prod_func', # nom de la fonction associée à la tâche
     16                           stack_size = 2048,
     17                           sources = ['producer.c']) # nom du fichier source
     18        ] )
     19}}}
     20
     21Créez un fichier `consumer.sd` contenant :
     22{{{
     23TaskModel(
     24        'consumer',
     25        ports = { 'input' : MwmrInput() },
     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    while (1) {
     46        srl_log_printf(NONE, "Producer : Hello...\n");
     47        srl_mwmr_write(output, buf, 1);
     48    }
     49}
     50}}}
     51
     52Dans un autre fichier nommé `'consumer.c'`, saisissez le code suivant:
     53
     54{{{
     55#include <srl.h>
     56#include "consumer_proto.h"
     57
     58FUNC(cons_func) {
     59    srl_mwmr_t input = GET_ARG(input);
     60    char buf[32];
     61    while (1) {
     62        srl_mwmr_read(input, buf, 1);
     63        srl_log_printf(NONE, "Consumer : %s\n", buf);
     64    }
     65}
     66}}}
     67
     68Bilan : 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`).
     69
     70== Fichier de description DSX/L ==
     71
     72Retournez dans le répertoire de l'application (donc le répertoire parent de `'src'`).
     73
     74Créez un fichier python, pour lequel vous pouvez vous-même choisir un nom (par exemple `'splitmsg.py'`).
     75
     76Ce fichier représente le '''fichier de description DSX''', et sera nommé comme tel par la suite.
     77
     78Saisissez dans ce fichier le texte suivant :
     79
     80{{{
     81#!/usr/bin/env python
     82
     83import dsx
     84
     85# Partie 1 : définition du TCG (Graphe des Tâches et des Communications)
     86
     87fifo0 = dsx.Mwmr('fifo0', 4, 6) # largeur (nombre de mots d'un item) et profondeur (nombre max d'items)
     88
     89tcg = dsx.Tcg('split_message',
     90        dsx.Task('prod0', 'producer',
     91                 {'output':fifo0} ),
     92        dsx.Task('cons0', 'consumer',
     93                 {'input':fifo0} ),
     94        )
     95
     96# Partie 2 : génération du code exécutable sur station de travail POSIX
     97
     98tcg.generate(dsx.Posix())
     99}}}
     100
     101Important : La ligne {{{#!/usr/bin/env python}}} doit être la ''première ligne'' du fichier.
     102
     103Note : 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 -*-'`)
     104
     105Rendez ce fichier exécutable :
     106{{{
     107$ chmod +x le_nom_de_fichier
     108}}}