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
