| Version 9 (modified by , 18 years ago) (diff) |
|---|
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:
TaskModel(
'producer',
ports = { 'output' : MwmrOutput(32) },
impl = [
SwTask('prod_func',
stack_size = 1024,
sources = ['producer.c'])
] )
Créez un fichier consumer.task contenant:
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
