Guide d'utilisation de Syndex V5 (par Cédric Pradalier)

Pré-requis

  • Application de référence : $WRKREP/linuxIO2_
  • Sur le Cycab, ie la machine bcycab : /root/syndex/linuxIO2_
  • Faire une copie avant toute modification et travailler sur la copie. La version actuelle de ce repertoire est essentielle pour toutes les manipulations fonctionnant actuellement sur le Cycab.
  • Pour une question de confort:
    • éviter de travailler directement sur le Cycab
    • travailler avec un affichage déporté sur une station (telnet + export DISPLAY=...)

Définition de l'architecture Syndex

Cette architecture est définie dans le fichier linio.sdx.

Pour la visualiser :
  • positionner la variable suivante (si non predefinie)
export SYNDEX5=/usr/local/syndex51 setenv SYNDEX5 /usr/local/syndex51
  • lancer syndex via la commande /usr/local/syndex51/syndex5
  • ouvrir le fichier linio.sdx via le menu File et l'item Open...

Le graphe affiché à l'écran (cf. ci-dessus) possède deux sous-graphes disjoints :
  • Une partie composée de root, r555, f555 et can. Cette partie représente les processeurs et les canaux de communication disponibles. Pour ajouter un processeur mpc555, il suffit donc d'ajouter (copier/coller) une boîte nommée 555. Ensuite, éditer (click droit -> properties) les propriétés du noeud et modifier selon les besoins. ALERT! à vérifier, consulter une référence concernant l'identifiant du noeud 555 ?
  • La seconde partie du graphe représente le flux de données et d'opération qui tourne sur ce système. Il existe plusieurs type de boîtes :
    • extio : une boîte fonctionnelle avec des variables statiques, une initialisation et un corps de boucle. C'est la plus pratique.
    • function : comme extio, mais sans variable statique ni initialisation
    • constant, ... : quelle est leur utilité ?
C'est dans cette partie du graphe qu'il faudra ajouter l'accès aux ultra-sons, 'exportation des valeurs et eventuellement la lecture de commande/parametres du programme utilisateur.

Quelques explications sur le graphe actuel : On peut le découper en trois parties.
  • [A gauche] les fonctions de lecture des capteurs (TPU, SPI,...) : pas d'entrée, juste des sorties. Si on demande (click droit -> show constraints), les contraintes, on constate que ces boîtes doivent s'exécuter sur le mpc555 qui leur correspond.
  • [Au milieu] linuxIO : une mémoire partagée, contrainte sur le PC embarqué (noté root). Les données issues des capteurs sont écrites dans la mémoire en passant par le CAN. [cf plus les mecanismes reels mis en place ici]. Il serait judicieux que les ultra-sons soient gérés dans une boîte similaire à linuxIO.
  • [A gauche] l'envoi des commandes jusqu'aux fonctions qui réalisent les PIDs du contrôle bas-niveau. Les commandes sont lues dans la mémoire partagée et envoyées sur le CAN aux mpc555. Les fonctions intermediaires gèrent la sécurité.

Implantation des boîtes

Les fonctions représentées par les boîtes du graphe Syndex sont implémentées dans le fichier linio.m4x. Il s'agit d'un fichier en format M4 (langage de script infame), qui va être interprété au moment où le code représenté par le graphe Syndex sera généré.

ALERT! ne pas utiliser d'apostrophe dans les commentaires : cela plante la compilation.

Syntaxe d'une fonction

La syntaxe d'une fonction est la suivante :
define(`MaFonction',`ifelse(
MGC,INIT,`le code correspondant a l'initialisation',
MGC,LOOP,`le code execut? ? chaque it?ration', 
MGC,END,`le code de terminaison')
')

Selon les règles de traduction disponible et le processeur, le code est écrit soit en assembleur, soit en C. En assembleur, les arguments (de $1 à $9) sont accessibles avec B(lwz r31,$1). En C, ce sont des int*, accessibles avec *$2.

De cette façon, on doit pouvoir utiliser et compiler du C sur les mpc555, mais comment ?

Les identifiants des cartes CAN sont aussi définis ici, avec quelque chose comme define(`r555id',0x...). cf les premieres lignes de linio.m4x

Différence entre B() et _B() :

Dans B(), il y a une fonction d'initialisation absente de _B(). Normalement, on appelle donc B() la première fois et _B() ensuite. Ces fonctions définissent le cadre de pile courant et permettent donc d'accéder aux arguments des fonctions.

Visualisation et debug

Il est possible de créer un module qui affiche ses entrées. Il s'agit de la fonction display un exemple est disponible dans /root/syndex/man_drv2/linio.m4x. Pour l'ajouter au graphe Syndex :
  • soit étudier l'interface Syndex pour trouver le moyen de le faire
  • soit ajouter la bonne ligne dans le fichier =linio.sdx, dont la syntaxe est assez evidente.

Cas particulier du module linio

Lorsqu'il est interpreté par M4, ce module construit un fichier linio.h contenant les structures et adresses des mémoires partagées. Ces structures sont construites à partir des noms de toutes les variables d'entrée et de sortie du module. La fonction définit alors le code d'un module noyau RTAI qui crée les mémoires partagées. On peut ensuite y accéder depuis l'espace utilisateur du système linux avec rtaishm.

Pour une illustration de ce mécanisme, voir la classe CycabInterface dans = /root/src/CycabDrv/cycabTools.*=, en particulier les constructeurs/destructeurs.

Utilisation de divert ou diversion

En M4, la notion de diversion correspond à un ensemble de lignes de code dont les sorties sont gardées dans un coin et ressorties plus tard.

Par exemple, le code qui se situe entre divert(ITtimer) et divert(0) est inseré dans le gestionnaire d'interruption timer (une IT toutes les millisecondes), quel que soit l'endroit oú il est écrit dans le fichier linio.m4x.

Exécution de l'ensemble

Une fois que le code et le graphe Syndex sont OK, il faut tester et compiler.

3 étapes sont nécessaires pour cela :
  1. Dans Syndex, utiliser l'item Adequation->DoIt. C'est une forme de verification syntaxique du graphe. Cela signale de façon plus ou moins claire les problèmes qui peuvent exister.
  2. Dans Syndex, utiliser l'item Adequation->GenExec. Cette étape permet de générer le code M4. Pas de message d'erreur. Les fichiers f555.s, r555.s et root.c sont générés.
  3. Dans un shell, en ayant au préalable soulevé le Cycab (raison de sécurité), on lance make. Les fichiers générés sont compilés et le module root est chargé, le code est téléchargé sur les processeurs 555 et l'application est lancée.

HELP Si une erreur est détectée sur la ligne 1255 du fichier r555.s, il faut identifier l'équivalent dans le fichier linio.m4x et corrigé. Un plaisir...

-- SorayaArias - 22 Jul 2004

Topic attachments
I Attachment Action Size Date Who Comment
SchemaSyndex.psps SchemaSyndex.ps manage 46 K 22 Jul 2004 - 08:40 SorayaArias Schéma du graphe Syndex
Topic revision: r5 - 31 Jul 2013, SorayaArias
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding SedWiki? Send feedback