|
@@ -102,7 +102,7 @@
|
102
|
102
|
{\scriptsize Institut National des Sciences Appliquées de Toulouse}\\
|
103
|
103
|
---\\
|
104
|
104
|
Guide des outils de développement \\
|
105
|
|
-{\large Version 1.0.$\beta$ (\today)}\\
|
|
105
|
+{\large Version 1.0.1 (\today)}\\
|
106
|
106
|
{\scriptsize Référent pédagogique : P.-E. Hladik (\texttt{pehladik@insa-toulouse.fr})}\\
|
107
|
107
|
{\scriptsize Référents plateforme : S. Di Mercurio (\texttt{dimercur@insa-toulouse.fr})}\\
|
108
|
108
|
---
|
|
@@ -120,172 +120,33 @@ Guide des outils de développement \\
|
120
|
120
|
\label{sec:git}
|
121
|
121
|
%%%%%%%%%%%%%%%%%%%%
|
122
|
122
|
|
123
|
|
-Le code du projet est disponible sur un dépôt git hébergé sur GitHub. Pour le récupérer, placer vous le répertoire cible et exécuter la commande\\ \indent\indent {\tt git clone https://github.com/INSA-GEI/dumber.git}
|
|
123
|
+Le code du projet est disponible sur un dépôt git hébergé sur GitHub. Pour le récupérer, placer vous le répertoire cible et exécuter la commande\\ \indent\indent {\tt git clone https://github.com/INSA-GEI/dumber.git}\\
|
124
|
124
|
|
125
|
|
-Il vous faut ensuite changer de branche, pour cela allez dans le répertoire {\tt dumber} puis exécuter la commande\\ \indent\indent {\tt git checkout stable}
|
126
|
|
-
|
127
|
125
|
Tout le code relatif au projet est disponible, cependant vous n'aurez besoin que des codes présents dans les répertoires :
|
128
|
126
|
\begin{itemize}
|
129
|
|
- \item {\tt ./dumber/software/raspberry}
|
130
|
|
- \item {\tt ./dumber/software/monitor/monitor}
|
131
|
|
-\end{itemize}
|
132
|
|
-
|
133
|
|
- \todo[inline]{Mettre à jour la suite en fonction du projet initial}
|
134
|
|
-
|
135
|
|
- Vous aurez alors un répertoire {\tt ./dumber/software} dans lequel vous trouverez les répertoires:
|
136
|
|
- \begin{itemize}
|
137
|
|
-\item {\tt /src} avec le codes des librairies du projet,
|
138
|
|
-\item {\tt /destijl\_init} avec le codes correspondant au projet initial,
|
139
|
|
-\item {\tt /example} avec des codes d'exemple pour utiliser les librairies (attention ce n'est pas à jour).\\
|
|
127
|
+ \item {\tt ./dumber/software/raspberry/superviseur-robot} : ce répertoire contient un projet Netbeans avec l'ensemble du code source pour le projet initial,
|
|
128
|
+ \item {\tt ./dumber/software/monitor/monitor} : ce répertoire contient un projet Mono contenant l'ensemble du code source pour le moniteur.\\
|
140
|
129
|
\end{itemize}
|
141
|
130
|
|
142
|
|
-
|
143
|
|
-Le code du projet initial est constitué des fichiers suivants :
|
|
131
|
+Le répertoire {\tt superviseur-robot} est constitué des fichiers suivants :
|
144
|
132
|
\begin{itemize}
|
145
|
|
-\item {\tt /destijl\_init/main.cpp} qui contient le main de l'application et les fonctions de création des objets (tâches, sémaphores, mutex, etc.) de l'architecture logicielle,
|
146
|
|
-\item {\tt /destijl\_init/src/functions.cpp} qui contient l'implémentation des fonctions,
|
147
|
|
-\item {\tt /destijl\_init/src/functions.h} qui contient l'entête des différentes fonctions.\\
|
|
133
|
+\item {\tt /destijl\_init/main.cpp} qui contient le main de l'application et lance la création des objets et leur exécution,
|
|
134
|
+\item {\tt /destijl\_init/src/tasks.h} qui contient l'entête des différentes fonctions,
|
|
135
|
+\item {\tt /destijl\_init/src/tasks.cpp} qui contient l'implémentation des fonctions de création des objets (tâches, sémaphores, mutex, etc.) ainsi que les fonction de traitement.
|
148
|
136
|
\end{itemize}
|
149
|
137
|
|
150
|
|
-A cela s'ajoute un fichier {\tt Makefile} disponible dans {\tt /destijl\_init} qui permet de compiler le projet initial sur une \raspi.
|
151
|
|
-
|
152
|
|
-
|
153
|
|
-%%%%%%%%%%%%%%%%%%%%
|
154
|
|
-\section{Mise en place d'un terminal distant sur la \raspi}
|
155
|
|
-\label{sec:ssh}
|
156
|
|
-%%%%%%%%%%%%%%%%%%%%
|
157
|
|
-
|
158
|
|
-Pour se connecter à la \raspi, vous aurez besoin de créer un accès via ssh. Pour cela, depuis un PC d'une salle informatique utilisez la commande :\\ \indent\indent{\tt ssh pi@10.105.1.x}\\
|
159
|
|
-avec {\tt x} le numéro sur le boitier de la \raspi.
|
160
|
|
-
|
161
|
|
-Le mot de passe est : insa.
|
162
|
|
-
|
163
|
|
-%%%%%%%%%%%%%%%%%%%%
|
164
|
|
-\section{Exécution du superviseur}
|
165
|
|
-\label{sec:utilisation}
|
166
|
|
-%%%%%%%%%%%%%%%%%%%%
|
167
|
|
-
|
168
|
|
-Pour exécuter l'application sur le superviseur, il faut après avoir mis en place un terminal distant puis démarrer l'exécution avec la commande {\tt sudo ./path/app} où {\tt path} est le chemin du répertoire où se trouve l'application et {\tt app} est le nom de votre application. Attention les droits {\tt sudo} sont nécessaires pour des questions d'accès à certains services Xenomai de gestion de la mémoire.
|
169
|
138
|
|
170
|
|
-%%%%%%%%%%%%%%%%%%%%
|
171
|
|
-\section{Exécution du moniteur}
|
172
|
|
-\label{sec:utilisation}
|
173
|
|
-%%%%%%%%%%%%%%%%%%%%
|
174
|
|
-
|
175
|
|
-L'exécution du moniteur se fait...
|
176
|
|
-\todo[inline]{Faire cette partie}
|
177
|
139
|
|
178
|
140
|
|
179
|
141
|
%%%%%%%%%%%%%%%%%%%%
|
180
|
|
-\section{Développement d'une application distante}
|
|
142
|
+\section{Compilation d'une application distante}
|
181
|
143
|
%%%%%%%%%%%%%%%%%%%%
|
182
|
144
|
|
183
|
|
-L'application étant sur une \raspi, il vous faut compiler le programme pour cette architecture. Pour faire cela, le plus simple est de compiler le code directement sur la cible à l'aide du {\tt Makefile}. Le problème est alors de choisir comment vous allez éditer le code. Il y a trois solutions envisagées :
|
184
|
|
-\begin{enumerate}
|
185
|
|
-\item édition locale et compilation distante manuelle : fatigant à la longue, il vaut mieux faire de scripts pour automatiser tout cela,
|
186
|
|
-\item édition locale et compilation distante avec netbeans : un peu laborieux à configurer, mais agréable ensuite,
|
187
|
|
-\item édition et compilation distante : mauvaise idée.
|
188
|
|
-\end{enumerate}
|
189
|
|
-Toutes ces solutions sont détaillées dans la suite.
|
190
|
|
-
|
191
|
|
-%%%%%%%%%%%%%%%%%%%%
|
192
|
|
-\subsection{Développement d'une application distante : édition locale et compilation distante manuelle}
|
193
|
|
-%%%%%%%%%%%%%%%%%%%%
|
194
|
|
-
|
195
|
|
-Cette solution consiste à éditer le code en local sur un PC et de faire la compilation distante sur la \raspi. Cela suppose donc de copier le code du PC sur la \raspi avant chaque compilation, puis de lancer la compilation (figure~\ref{fig:edition2}).
|
196
|
|
-
|
197
|
|
-\begin{figure}[htbp]
|
198
|
|
-\begin{center}
|
199
|
|
-\includegraphics[scale=0.5]{./figures-pdf/edition2}
|
200
|
|
-\caption{Edition locale et compilation distante}
|
201
|
|
-\label{fig:edition2}
|
202
|
|
-\end{center}
|
203
|
|
-\end{figure}
|
204
|
|
-
|
205
|
|
-Les étapes à suivre sont alors :
|
206
|
|
-\begin{enumerate}
|
207
|
|
-\item récupérer le code du dépôt (voir section~\ref{sec:git}) sur le PC,
|
208
|
|
- \item éditer le code avec l'outil que vous préférez,
|
209
|
|
- \item copier le code du PC vers la \raspi en utilisant la commande {\tt sftp} (voir ci-dessous),
|
210
|
|
-\item se connecter de manière distante à la \raspi via ssh (voir section~\ref{sec:ssh}),
|
211
|
|
- \item compiler avec la commande {\tt make} à l'aide du {\tt Makefile} (qu'il faudra aussi avoir copié sur la \raspi),
|
212
|
|
- \item lancer l'exécutable par la commande {\tt sudo ./superviseur} (voir section ~\ref{sec:utilisation}).
|
213
|
|
- \end{enumerate}
|
214
|
|
-
|
215
|
|
-
|
216
|
|
-\paragraph{Copie distante de fichiers :}
|
217
|
|
-Il est possible d'utiliser {\tt sftp} pour copier un fichier d'une machine sur une autre. Pour cela, en se plaçant dans le répertoire où se trouve le fichier à copier, il faut exécuter les commandes suivantes :
|
218
|
|
-\\ \indent\indent{\tt sftp pi@10.105.1.x} avec {\tt x} le numéro de la \raspi (mot de passe {\tt insa}),
|
219
|
|
-\\ \indent\indent{\tt sftp > put file} avec {\tt file} le nom du fichier à copier,
|
220
|
|
-\\ \indent\indent{\tt sftp > bye} pour quitter sftp.
|
221
|
|
-
|
222
|
|
-
|
223
|
|
-%%%%%%%%%%%%%%%%%%%%
|
224
|
|
-\subsection{Développement d'une application distante : édition locale et compilation distante (version Netbeans)}
|
225
|
|
-%%%%%%%%%%%%%%%%%%%%
|
226
|
|
-
|
227
|
|
-Cette deuxième solution applique le même schéma que précédemment (édition locale du code et compilation distante) mais en utilisant Netbeans comme IDE (figure~\ref{fig:edition2b}).
|
228
|
|
-
|
229
|
|
-\begin{figure}[htbp]
|
230
|
|
-\begin{center}
|
231
|
|
-\includegraphics[scale=0.5]{./figures-pdf/edition2b}
|
232
|
|
-\caption{Edition locale et compilation distante avec Netbeans}
|
233
|
|
-\label{fig:edition2b}
|
234
|
|
-\end{center}
|
235
|
|
-\end{figure}
|
236
|
|
-
|
237
|
|
-Cette solution peut sembler longue, mais une fois la configuration réalisée il en restera plus qu'à lancer les éléments automatiquement.
|
238
|
|
-
|
239
|
|
-Les principales étapes sont :
|
240
|
|
-\begin{enumerate}
|
241
|
|
-\item éditer le code sur Netbeans,
|
242
|
|
-\item lancer la compilation distante depuis Netbeans qui se chargera de copier les fichiers distants et de les compiler,
|
243
|
|
-\item lancer un terminal depuis Netbeans,
|
244
|
|
-\item exécuter le programme.
|
245
|
|
-\end{enumerate}
|
246
|
|
-
|
247
|
|
-\subsubsection{Récupérer le code}
|
248
|
|
-
|
249
|
|
-Copiez localement (sur le PC) le dépôt git (voir section~\ref{sec:git}).
|
250
|
|
-
|
251
|
|
-\todo[inline]{Mettre à jour en fonction du dépot}
|
252
|
|
-
|
253
|
|
-\framebox[\textwidth]{
|
254
|
|
-\begin{minipage}{0.9\textwidth}
|
255
|
|
-Le projet initial est livré avec un projet Netbeans déjà configuré. Vous pouvez simplement l'ouvrir depuis... Il vous faudra ensuite simplement reconfigurer la cible en suivant les étapes présentées dans la section~\ref{sec:cible}.
|
256
|
|
-\end{minipage}
|
257
|
|
-}
|
258
|
|
-
|
259
|
|
-
|
260
|
|
-\subsubsection{Créer un projet Netbeans}
|
261
|
|
-
|
262
|
|
-\begin{enumerate}
|
263
|
|
-\item Lancez Netbeans,
|
264
|
|
-\item Allez dans {\tt File->new project},
|
265
|
|
-\item Choisir {\tt C/C++} pour {\tt categories}, puis {\tt C/C++ Application},
|
266
|
|
-\item Cliquez Next
|
267
|
|
-\item Donner un nom au projet (ce sera par défaut le nom de votre exécutable),
|
268
|
|
-\item Décocher {\tt Create main file},
|
269
|
|
-\item cliquez sur {\tt Finish},
|
270
|
|
-\end{enumerate}
|
271
|
|
-
|
272
|
|
-\subsubsection{Importer le code dans le projet}
|
273
|
|
-
|
274
|
|
-\begin{enumerate}
|
275
|
|
-\item Cliquez droit sur votre projet et choisissez {\tt Add existing items from Folders...},
|
276
|
|
-\item puis {\tt Add Folder... } et allez chercher les répertoires que vous avez importé depuis github :
|
277
|
|
-\begin{itemize}
|
278
|
|
-\item {\tt superviseur\_robot/destijl\_init},
|
279
|
|
-\item {\tt superviseur\_robot/src},
|
280
|
|
-\end{itemize}
|
281
|
|
-\item Cliquez {\tt Add}.
|
282
|
|
-\end{enumerate}
|
283
|
|
-
|
284
|
|
-Vous pouvez supprimer tous les autres répertoires du projet (clique droit sur les répertoires).
|
|
145
|
+L'application étant sur une \raspi, il vous faut compiler le programme pour cette architecture. Nous vous proposons d'utiliser Netbeans pour écrire votre code et faire la compilation distante. Cela signifie que votre code est stocké sur votre compte INSA, que vous éditer le code sur la machine de TP, que ce code est ensuite automatiquement chargé sur la \raspi puis compilé (Netbeans permet de faire tout cela).
|
285
|
146
|
|
286
|
|
-\subsubsection{Configurer une compilation distante}
|
287
|
|
-\label{sec:cible}
|
|
147
|
+Pour commencer lancer Netbeans et ouvrez le projet {\tt superviseur-robot}.
|
288
|
148
|
|
|
149
|
+Avant de compiler, il vous faut configurer la cible sur laquelle la compilation va se faire:
|
289
|
150
|
\begin{enumerate}
|
290
|
151
|
\item Cliquez droit sur le projet et choisir {\tt Properties},
|
291
|
152
|
\item Allez dans l'onglet {\tt Build},
|
|
@@ -304,101 +165,60 @@ Vous pouvez supprimer tous les autres répertoires du projet (clique droit sur l
|
304
|
165
|
\item Cliquez {\tt OK}.
|
305
|
166
|
\end{enumerate}
|
306
|
167
|
|
307
|
|
-\subsubsection{Configurer la compilation}
|
308
|
|
-
|
309
|
|
-\begin{enumerate}
|
310
|
|
-\item Cliquez droit sur le projet et choisir {\tt Properties},
|
311
|
|
-\item Allez dans l'onglet {\tt Build->C++ Compiler},
|
312
|
|
-\item Choisir {\tt ...} pour {\tt Additional Options},
|
313
|
|
-\item Copier dans le champ {\tt -D\_GNU\_SOURCE -D\_REENTRANT -fasynchronous-unwind-tables -D\_\_MERCURY\_\_ -I/usr/xenomai/include/alchemy -g -D\_WITH\_TRACE\_
|
314
|
|
-
|
315
|
|
--I/usr/xenomai/include/ -I/usr/xenomai/include/mercury -MMD -MP}
|
316
|
|
-\item Cliquez {\tt OK},
|
317
|
|
-\item Allez dans l'onglet {\tt Build->Linker},
|
318
|
|
-\item Choisir {\tt ...} pour {\tt Additional Options},
|
319
|
|
-\item Copier dans le champ {\tt -D\_GNU\_SOURCE -D\_REENTRANT -fasynchronous-unwind-tables -D\_\_MERCURY\_\_ -I/usr/xenomai/include/alchemy -L/usr/xenomai/lib -lalchemy
|
|
168
|
+Pour compiler, il suffit ensuite de cliquer sur l'icône en forme de marteau. Vous pourrez voir dans le terminal les étapes de compilation qui commence par le transfert des fichiers suivi de la compilation proprement dite.
|
320
|
169
|
|
321
|
|
--lcopperplate -lmercury -L/opt/vc/lib -I/usr/local/include -lopencv\_highgui -lopencv\_core -lopencv\_imgproc -Wl,{-}{-}no-as-needed -lalchemy -lcopperplate
|
|
170
|
+{\bf Remarque} : la première compilation est un peu longue, mais devrait ensuite se fluidifier avec la compilation incrémentale.
|
322
|
171
|
|
323
|
|
-/usr/xenomai/lib/xenomai/bootstrap.o -Wl,{-}{-}wrap=main
|
324
|
172
|
|
325
|
|
--Wl,{-}{-}dynamic-list=/usr/xenomai/lib/dynlist.ld -L/usr/xenomai/lib -lmercury
|
|
173
|
+%%%%%%%%%%%%%%%%%%%%
|
|
174
|
+\section{Exécution du superviseur}
|
|
175
|
+\label{sec:utilisation}
|
|
176
|
+%%%%%%%%%%%%%%%%%%%%
|
326
|
177
|
|
327
|
|
--lpthread -lrt -Wl,-rpath /usr/xenomai/lib -lopencv\_highgui -lopencv\_core
|
|
178
|
+Pour exécuter l'application sur le superviseur, il faut après avoir mis en place un terminal distant (voir ci-dessous) puis démarrer l'exécution avec la commande {\tt sudo ./path/app} où {\tt path} est le chemin du répertoire où se trouve l'application et {\tt app} est le nom de votre application. Attention les droits {\tt sudo} sont nécessaires pour des questions d'accès à certains services Xenomai de gestion de la mémoire.
|
328
|
179
|
|
329
|
|
--lopencv\_imgcodecs -lraspicam\_cv -lopencv\_imgproc -lpthread}
|
330
|
|
-\item Cliquez {\tt OK},
|
331
|
|
-\item Cliquez {\tt Apply},
|
332
|
|
-\item Cliquez {\tt OK}.
|
333
|
|
-\end{enumerate}
|
|
180
|
+Si vous utilisez Netbeans, le répertoire dans lequel est compilée l'application se trouve dans l'arboressence commençant par {\tt .netbeans} (attention au "." au début). Il faut descendre dans cette arboressence jusqu'à une bifurcation, puis choisir le répertoire {\tt dist} et aller jusqu'au bout. L'application se trouve au bout de cette branche.
|
334
|
181
|
|
335
|
|
-\subsubsection{Tester la compilation}
|
336
|
182
|
|
337
|
|
-\begin{enumerate}
|
338
|
|
-\item Cliquez sur l'icone \og Marteau \fg ou allez dans {\tt Run->Build Project}.
|
339
|
|
-\end{enumerate}
|
|
183
|
+%%%%%%%%%%%%%%%%%%%%
|
|
184
|
+\section{Mise en place d'un terminal distant avec la \raspi}
|
|
185
|
+\label{sec:ssh}
|
|
186
|
+%%%%%%%%%%%%%%%%%%%%
|
340
|
187
|
|
341
|
|
-\subsubsection{Configurer l'exécution}
|
|
188
|
+Pour se connecter à la \raspi, vous aurez besoin de créer un accès via ssh. Pour cela, depuis un PC d'une salle informatique utilisez la commande :\\ \indent\indent{\tt ssh pi@10.105.1.x}\\
|
|
189
|
+avec {\tt x} le numéro sur le boitier de la \raspi.
|
342
|
190
|
|
343
|
|
-\begin{enumerate}
|
344
|
|
-\item Cliquez droit sur le projet et choisir {\tt Properties},
|
345
|
|
-\item Allez dans l'onglet {\tt Run},
|
346
|
|
-\item Remplir le champ {\tt Run Command} avec {\tt sudo "\$\{OUTPUT\_PATH\}"},
|
347
|
|
-\item Remplir le champ {\tt Console Type} avec {\tt Standard Output}.
|
348
|
|
-\end{enumerate}
|
|
191
|
+Le mot de passe est : insa.
|
349
|
192
|
|
350
|
|
-\subsubsection{Exécuter l'application (directement depuis Netbeans)}
|
351
|
|
-\begin{enumerate}
|
352
|
|
-\item Cliquez sur l'icone \og Play \fg ou allez dans {\tt Run->Build Project}.
|
353
|
|
-\end{enumerate}
|
354
|
193
|
|
355
|
|
-\subsubsection{Exécuter l'application (avec un terminal)}
|
356
|
|
-\begin{enumerate}
|
357
|
|
-\item Cliquez sur l'icone \og Terminal \fg dans la fenêtre de le console (ou lancer un terminal),
|
358
|
|
-\item Connectez via ssh à la \raspi,
|
359
|
|
-\item allez dans {\tt .netbeans/.../dist/...} avec la commande {\tt cd} pour trouver le résultat de la compilation,
|
360
|
|
-\item lancez l'exécution via {\tt sudo ./app} avec {\tt app} le nom de votre application.
|
361
|
|
-\end{enumerate}
|
|
194
|
+%%%%%%%%%%%%%%%%%%%%
|
|
195
|
+\section{Exécution du moniteur}
|
|
196
|
+\label{sec:utilisation}
|
|
197
|
+%%%%%%%%%%%%%%%%%%%%
|
362
|
198
|
|
363
|
|
-\subsubsection{Ajouter les header dans le projet Netbeans}
|
|
199
|
+Pour exécuter le moniteur, il suffit depuis votre PC de travail de se placer dans le répertoire {\tt ./dumber/software/monitor/monitor} et de lancer {\tt ./monitor}.
|
364
|
200
|
|
365
|
|
-\begin{enumerate}
|
366
|
|
-\item Téléchargez les entêtes des services Xenomai depuis \href{https://moodle.insa-toulouse.fr/mod/resource/view.php?id=37439}{moodle},
|
367
|
|
-\item Décompresser l'archive,
|
368
|
|
-\item Cliquez droit sur le projet et choisir {\tt Properties},
|
369
|
|
-\item Allez dans l'onglet {\tt Build->C++ Compiler},
|
370
|
|
-\item Choisir {\tt ...} pour {\tt Include Headers},
|
371
|
|
-\item Cliquez sur {\tt Add},
|
372
|
|
-\item Sélectionner tous les fichiers {\tt .h} de l'archive chargée ({\tt ./include\_xenomai/include}),
|
373
|
|
-\item Cliquez {\tt OK},
|
374
|
|
-\item Cliquez {\tt Apply},
|
375
|
|
-\item Cliquez {\tt OK}.
|
376
|
|
-\end{enumerate}
|
|
201
|
+{\bf Attention} : avant de lancer la première fois l'application, il vous faut ouvrir l'environnement de développement MonoDevelop et ouvrir le projet {\tt ./dumber/software/monitor/monitor} et l'exécuter (cela recompile le projet et permet de faire les liens avec les librairies de votre PC). Cette étape ne sera plus à faire par la suite.
|
377
|
202
|
|
378
|
|
-Le service {\tt rt\_task\_create} n'est pas reconnu suite à cette manipulation car il est déclaré à travers une macro qui masque à Netbeans son existence. Le service restera donc souligné en rouge.
|
379
|
203
|
|
380
|
204
|
%%%%%%%%%%%%%%%%%%%%
|
381
|
|
-\subsection{Développement d'une application distante : édition et compilation distantes}
|
|
205
|
+\section{Comprendre la structuration du code}
|
|
206
|
+\label{sec:code}
|
382
|
207
|
%%%%%%%%%%%%%%%%%%%%
|
|
208
|
+ L'ensemble du code du projet initial est contenu dans le répertorie {\tt superviseur-robot}. Les bibliothèques de traitement sont disponibles dans le repertoire {\tt lib}. Vous n'aurez pas à modifier ces bibliothèques, par contre vous devrez les utiliser. La documentation est directement écrite dans le code source.
|
|
209
|
+
|
|
210
|
+ Les seuls fichiers que vous allez avoir à modifier sont les fichiers {\tt tasks.h} et {\tt tasks.cpp}. La classe {\tt Tasks} a pour attributs privés l'ensemble des structures constituant l'application (tâches, mutex, sémarphores, ressources, etc.). Les fonctions de traitement associées aux tâches sont déclarées comme des méthodes privées de {\tt Tasks}.
|
|
211
|
+
|
|
212
|
+ La classe {\tt Tasks} propose quatre méthodes publics :
|
|
213
|
+ \begin{itemize}
|
|
214
|
+ \item {\tt Init()} qui crée les structures de l'application,
|
|
215
|
+ \item {\tt Run()} qui lance les tâches,
|
|
216
|
+ \item {\tt Stop()} qui termine les tâches,
|
|
217
|
+ \item {\tt Join()} qui suspend l'exécution du {\tt main}.\\
|
|
218
|
+ \end{itemize}
|
383
|
219
|
|
384
|
|
-Cette dernière solution est à éviter. Elle consiste à éditer le code directement sur la \raspi et d'y lancer la compilation via un terminal (figure~\ref{fig:edition1}).
|
385
|
|
-
|
386
|
|
-\begin{figure}[htbp]
|
387
|
|
-\begin{center}
|
388
|
|
-\includegraphics[scale=0.45]{./figures-pdf/edition1}
|
389
|
|
-\caption{Edition et compilation distante}
|
390
|
|
-\label{fig:edition1}
|
391
|
|
-\end{center}
|
392
|
|
-\end{figure}
|
393
|
|
-
|
394
|
|
-Les étapes à suivre sont alors :
|
395
|
|
-\begin{enumerate}
|
396
|
|
-\item se connecter de manière distante à la \raspi via ssh (voir section~\ref{sec:ssh}),
|
397
|
|
- \item éditer à distance (par ex. avec {\tt nano}) le code,
|
398
|
|
- \item compiler avec la commande {\tt make} à l'aide du {\tt Makefile} du répertoire {\tt /destijl\_init},
|
399
|
|
- \item lancer l'exécutable par la commande {\tt sudo ./superviseur} (voir section ~\ref{sec:utilisation})\\
|
400
|
|
-\end{enumerate}
|
|
220
|
+Pour ajoutez des structures à l'application, il suffit de les déclarer dans le fichier {\tt tasks.h} puis de s'assurer qu'elles sont bien instanciées dans les méthodes adéquates de {\tt tasks.cpp}. Pour une tâche, il faut en plus déclarer une nouvelle méthode privée dans {tasks.h} et fournir son implémentation dans {tasks.cpp}. Cette nouvelle méthode sera le point d'entrée de la tâche.
|
401
|
221
|
|
402
|
|
-Vous pouvez ensuite lancer le moniteur (voir section~\ref{sec:utilisation}) pour interragir avec l'application.
|
|
222
|
+Toute la documentation de Xenomai se trouve en ligne (attention c'est Xenomai 3) et nous utilisons l'\href{https://xenomai.org/documentation/xenomai-3/html/xeno3prm/group__alchemy.html}{API alchemy}.
|
403
|
223
|
|
404
|
224
|
\end{document}
|