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