\documentstyle [art12,a4] {article}
\begin{document}





\hskip 3.9truein
EDOC117\par
\begin{center}
\bf \large  - CENBG - \\




* * * \\

\end{center}

\vspace{3 cm}

\begin{center}
\bf \Large BIBLIOTHEQUE D'UTILISATION \\
DE LA \\
CARTE\\
HSM 8170\\
SOUS\\
VxWorks
\end{center}

\vspace{5cm}

\noindent
Patrice KADIONIK\\
04/02/91
\newpage

\noindent
Ce document est bas\'e sur le manuel d'utilisation de la carte m\'emoire
HSM ("HSM 8170 User's Manual"). Pour plus d'explications, se reporter \`a
ce document de base...


\section{G\'en\'eralit\'es :}


\noindent
Le but de ce papier est de pr\'esenter de fa\c con succinte la biblioth\`eque
d'utilisation de la HSM dans l'environnement VxWorks.\\
Il est bon de noter le parall\'elisme qui existe entre la cr\'eation d'une
biblioth\`eque sous UNIX et sous VxWorks :\\


\subsection{Biblioth\`eque sous UNIX :}


\noindent
La cr\'eation d'une biblioth\`eque se fait en utilisant {\it ar}.
Dans un fichier source hsm.c, on d\'efinit les diff\'erentes fonctions
composant la biblioth\`eque.\\
Puis, l'on fait une compilation de ce fichier sans \'edition de liens
(fichier hsm.o). Ce peut \^etre un fichier de format {\it a.out}
 de type sparc (compilation) ou 68020
(cross-compilation en utilisant le GNU-CC ou le cross-compilateur SUN).\\
On fait appel \`a l' "archiveur".\\
L'utilisation ult\'erieure de la biblioth\`eque se fera en pr\'ecisant lors
de la (cross-)\-compilation d'un fichier source utilisant cette biblioth\`eque,
le nom de la bi\-bli\-o\-th\`e\-que et le r\'epertoire o\`u se trouve le fichier
archive.\\
Cela donne :\\



\noindent
\% vi hsm.c\\
...\\
\% cc -c hsm.c\\
\% ar rcv libhsm.a hsm.o\\
\% mv libhsm.a /home/users/kadionik/lib\\
\% vi file.c     utilisation de la biblioth\`eque\\
...\\
\% cc -o file file.c -lhsm -L/home/users/kadionik/lib\\



\noindent
Notons qu'il est imp\'eratif que le fichier archive s'appelle lib???.a pour
\^etre reconnu par l'\'editeur de liens !\\
La position des diff\'erentes options de compilation est tr\`es importante.\\
Remarquons que l'on fait une \'edition de liens statique pour la compilation
du fichier source qui utilise la biblioth\`eque ; c'est \`a dire qu'est inclus
le code de cette biblioth\`eque dans le code ex\'ecutable de chaque programme
qui l'utilise. On a donc un gaspillage de la m\'emoire quand 2 processus
utilisant cette biblioth\`eque s'ex\'ecutent.\\
L'\'edition de liens (sous UNIX) dynamique (biblioth\`eque partag\'ee) permet
de rem\'edier \`a ce probl\`eme...\\


\subsection{Biblioth\`eque sous VxWorks :}


\noindent
La marche \`a suivre est plus simple car VxWorks est avant tout bas\'e
sur l'\'edition de liens dynamique (r\'esolution des probl\`emes
de r\'ef\'erences externes en utilisant la Table des Symboles de
VxWorks).\\
Il suffit donc pour une cible MVME 147 de faire une cross-compilation
du fichier source de la biblioth\`eque sans \'edition de liens, puis
de le charger dans la cible :\\
\% pwd\\
/home/users/kadionik/VxWorks-5.0\\
\% vi hsmlib.c\\
\% cc -sun3 -I/home/users/kadionik/vw-5.0/h -c hsmlib.o hsmlib.c\\
\% rlogin "cible"\\
-$>$ cd "~kadionik/VxWorks-5.0"\\
-$>$ ld$<$hsmlib.o\\


\noindent
La biblioth\`eque est charg\'ee une seule fois et est accessible \`a toutes les
t\^aches s'ex\'ecutant dans le chassis cible.\\


\section{La biblioth\`eque :}


\noindent
Elle se compose principalement de 3 fichiers :\\
- hsmreg.h : fichier de structure de donn\'ees.\\
- hsmlib.c : d\'efinition de toutes les fonctions.\\
- hsmlib.h : fichier de type .h .\\

\noindent
L'utilisation ult\'erieure pr\'esuppose l'ajout d'une directive du type :\\
\# include "hsmlib.h" \\
dans le fichier source des programmes qui s'ex\'ecuteront dans le
chassis  cible.\\

\noindent
On distingue principalement des fonctions permettant l'initialisation
de la carte HSM :\\
- hsmVmeMap();\\
- hsmRegMap();\\
- hsmReset();\\
- hsmInit();\\
- hsmAcqEna();\\
- hsmIntClr();\\


\noindent
On dis\-tin\-gue aus\-si des fonc\-tions per\-met\-tant des op\'e\-ra\-tions de
con\-sul\-ta\-tion-\-mo\-di\-fi\-ca\-tion de re\-gis\-tres de la car\-te :\\
- hsmRegCpy();\\
- hsmAcqSts();\\
- hsmAcqEna();\\
- hsmIntSrc();\\
- hsmIntVec();\\
- hsmIntEna();\\
- hsmIntLev();\\
- hsmMemOvf();\\
- hsmMemPtr();\\
- hsmMemCnt();\\


\noindent
On distingue enfin des fonctions permettant des op\'erations diverses :\\
- hsmMemFil();\\


\noindent
On se re\-por\-te\-ra aux notes ma\-nus\-cri\-tes et aux fi\-chiers sour\-ce
 pour plus
d'in\-for\-ma\-tions...\\


\section{Initialisation de la carte HSM :}


\noindent
On distingue d'abord une initialisation "hard"  en configurant
par des jumpers les adresses VME et VSB... de la carte
(Cf le "User's Manual").\\

\noindent
On distingue ensuite une initialisation "soft" de la carte en utilisant
la bi\-bli\-o\-th\`e\-que.
Ceci se fait simplement en utilisant successivement les fonctions
sui\-van\-tes :\\
- hsmVmeMap();\\
- hsmRegMap();\\
- hsmReset();\\
- hsmInit();\\
- hsmAcqEna();\\


\section{Prochains d\'eveloppements :}

En cours d'int\'egration dans une chaine d'acquisition qui existe au CENBG,
la carte HSM et le logiciel d'acquisition \`a produire permettront d'avoir
des r\'esultats sur les performances de celle-ci. Nous allons aussi
int\'egrer une carte CPU (MVME 135) voire une deuxi\`eme carte CPU
(MVME 165) dans notre "Event
Builder", ce qui nous permettra de tester les communications
inter-processeurs et de mettre en place des logiciels de tests...


\end{document}

