You are on page 1of 11

Dpartement Electronique, Physique et Propagation

Guide de llve

Module

PRATIQUE DE LA PROGRAMMATION
ET DES OS EMBARQUES

Promotion

Ingnieurs 2me anne


Dominante:
Dominante: Communication & Systmes Numriques (COMSYN)

Enseignants responsables
responsables

Khaled Grati

SUPCOM - Tunis Avril 2014

Pratique de la programmation et des OS Embarqus

SOMMAIRE

Partie 1 :
Initiation lenvironnement VDK de Visual DSP

Partie 2 :
Projet dapplication 1 : Driver simplifi dun Module GSM : Couche Phy
Partie 3 :
Projet dapplication 2 : Couche protocolaire de niveau 2 : Couche PPP

Avril 2014, SUPCOM K. Grati & F. Rouissi

Page 2 sur 11

Pratique de la programmation et des OS Embarqus

Partie 1

Initi
Initiation
tiation lenvironnement VDK de VDSP++
VDSP++
1.1 But

Lobjectif de ce TP dinitiation est dapprendre les tudiants utiliser lenvironnement


VDK de VDSP++. Dans ce TP, nous allons crer un nouveau projet VDK et saisir un
systme trs simple qui permet un change de messages entre deux threads.
1.2 Cration dun projet SDLSDL-RT

Pour crer un nouveau projet, il faut choisir le menu File puis New ensuite project. Ensuite
slectionner VDK Application dans la fentre Project Wizard . Sauvegarder le projet sous

un rpertoire nomm \TP0 sous le nom de ClientServeur. tel que cest indiqu par la
Figure 1.

Figure 1. Type de projet.


projet.

Une fois le projet cr, un nouvel onglet kernel sajoute dans la fentre affichant la
liste des projets en cours de traitement. Cet onglet permet de dterminer les options du
projet VDK telles que les options du processeur systme et celles des threads crer
dans le projet. En cliquant sur le champ Maximum Running Threads , fixer ce nombre 3.

Avril 2014, SUPCOM K. Grati & F. Rouissi

Page 3 sur 11

Pratique de la programmation et des OS Embarqus

Figure 2. Options de projet.


projet.
1.2.1 Cration dun thread

Avec le bouton droit de la souris cliquer sur le champ Thread Types et choisir New

Thread Type (voir Erreur ! Source du renvoi introuvable.).


introuvable.

Figure 3. Menu Thread Types.


Avril 2014, SUPCOM K. Grati & F. Rouissi

Page 4 sur 11

Pratique de la programmation et des OS Embarqus

Une nouvelle fentre saffiche pour saisir le nom du nouveau thread crer ainsi que le
choix du langage de programmation utiliser, slectionner le langage C. (voir Erreur !
Source du renvoi introuvable.).
introuvable.

Figure 2. Ajout d'un thread.


Une fois le nouveau Thread est cre, une mise jour longlet kernel est effectue, en
affichant les paramtres du thread, telles que sa priorit, lespace mmoire qui lui a t affecte,
et le nom du code source correspondant.
Activer loption dchange de messages en choisissant true pour le champ Message Enabled .
Refaire la mme opration pour crer un Thread Serveur , et un troisime booth (voir figure
5).

Avril 2014, SUPCOM K. Grati & F. Rouissi

Page 5 sur 11

Pratique de la programmation et des OS Embarqus

Figure 3. Liste
Liste des threads cres et leurs paramtres.
paramtres.
1.2.2

Cration du thread dinitialisation

Avec le bouton droit de la souris, cliquer sur le champ Boot Thread


Threadss et choisir New Boot

Thread
Thr
ead (voir Figure 6).

Figure 6. Menu Boot Tread .


Saisir le nom boot Ini pour le nouveau boot Thread et lui affecter le thread Type booth cre dans la phase
prcdente.
Avril 2014, SUPCOM K. Grati & F. Rouissi

Page 6 sur 11

Pratique de la programmation et des OS Embarqus

Figure 7. Thread dinitialisation.


dinitialisation.
1.2.3

Ajustement des paramtres des messages


messages

Afficher les paramtres des messages changs dans le systme, fixer 1 le nombre maximum de messages
changs simultanment (voir figure 8).

Figure 8. Paramtres des messages.


Une fois cette tape dinitialisation est termine, et en revenant longlet project , des fichiers
*.c reprsentant les squelettes des codes sources des diffrents threads crs ont t
automatiquement ajouts sous le rpertoire sources files (figure 9).

Avril 2014, SUPCOM K. Grati & F. Rouissi

Page 7 sur 11

Pratique de la programmation et des OS Embarqus

Figure 9. Liste des codes sources correspondants aux threads crs.


1.3 Dveloppement du code booth.c
1. Commencer par dclarer deux variables globales : server_ID et client_ID, les deux sont de
type VDK_ThreadID . Ces variables reprsenteront les identifiants des threads serveur
et client qui changeront les diffrents messages entre eux.

Figure 10. Dclaration des variables globales.


2. En commenant par la cration des threads sever_ID et client_ID
clien _ID, accder au
help\
help\contents\
contents\Manuals\
Manuals\Software

Tool

Manuals\
Manuals\VDK

Manual\
Manual\VisualDSP++

5.0

Kernel(VDK) Users Guide\


Guide\VDK API Reference\
Reference\API Summary 55-5 et vrifier le
prototype de la fonction VDK_CreateThread .

Figure 11
11. Utilisation de laide pour les fonctions VDK
Avril 2014, SUPCOM K. Grati & F. Rouissi

Page 8 sur 11

Pratique de la programmation et des OS Embarqus

3. Appeler la fonction VDK_CreateThread pour crer les threads et mettre leurs


identifiants dans les variables server_ID et client_ID .
4. Pour crer un message, regarder toujours dans le help sous API Summary 55-5, comment
utiliser la fonction VDK_CreateMessage . Pour cela :
a. Annoncer dans le fichier booth.h les macros MSTART, RQST et ACK, et leur
affecter respectivement les valeurs 0, 1 et 2. Ces macros reprsenteront les
diffrents types de messages changs entre les threads.
b. Dclarer les variables locales MsgType (de type int), MsgSize (de type unsigned
int) et *MsgPtr (de type void) utiliser dans la fonction VDK_CreateMessage ,
et leur affecter respectivement les valeurs MSTART, 0 et NULL.
c. Dclarer une variable locale MsgID de type VDK_MessageID.
5. Utiliser les dclarations prcdentes dans -b et -c

pour appeler la fonction

VDK_CreateMessage
VDK_CreateMessage .
6. Pour envoyer le message cr de type MSTART vers le thread client_ID :
a. Dclarer dans le fichier booth.h le macro CHANNEL et laffecter la valeur
VDK_kMsgChannel5. Ce canal permettra de transmettre les messages changs
entre les threads.
b. Utiliser la fonction VDK_PostMessage pour transmettre le message de type
MSTART vers le client.
1.4 Dveloppement du code client.c
Commencer par appeler la variable globale server_ID comme extern.
extern La suite du traitement
est effectu dans la boucle while de la fonction client_RunFunction .
1. Attendre le message MSTART sur CHANNEL :
a. Dclarer, de la mme faon que dans le fichier booth.c les variables locales
MsgID, MsgType,
MsgType MsgSize et *MsgPtr.
*MsgPtr
Remarque : cette dclaration est effectu en dehors de la boucle while
2. Utilisez la fonction VDK_PendMessage qui permet au thread client de dtecter la
rception du message via CHANNEL. Il faut mettre la valeur 0 dans largument Timeout
pour indiquer une attente infinie.
3. Pour lire et interprter le message reu, utiliser la fonction VDK_GetMessagePayload .
4. Si le type du message reu est MSATART ou ACK :

Avril 2014, SUPCOM K. Grati & F. Rouissi

Page 9 sur 11

Pratique de la programmation et des OS Embarqus

a. Attendre un moment de dure 1 tick (utiliser la fonction VDK_Sleep )


b. Changer le type du message : affecter la valeur RQST au type de message
5. Utiliser la fonction VDK_SetMessagePayload pour fixer les paramtres du message
prpar transmettre sur le canal
6. Utiliser la fonction VDK_PostMessage pour transmettre le message avec le nouveau
type (RQST) vers le serveur.
1.5 Dveloppement
Dveloppement du code serveur.c

Commencer par appeler la variable globale client_ID comme extern.


extern La suite du traitement est
effectu dans la boucle while de la fonction serveur_RunFunction
1. Attendre le message RQST sur CHANNEL :
a. Dclarer, de la mme faon que dans le fichier booth.c les variables locales
MsgID, MsgType,
MsgType MsgSize et *MsgPtr
b. Utiliser la fonction VDK_PendMessage qui permet au thread serveur de
dtecter la rception du message via CHANNEL
2. Pour lire et interprter le message reu, utiliser la fonction VDK_GetMessagePayload .
3. Si le type du message reu est RQST: changer le type du message en lui affectant la
valeur ACK
4. Utiliser la fonction VDK_SetMessagePayload pour fixer les paramtres du message
prpar transmettre sur le canal
5. Utiliser la fonction VDK_PostMessage pour transmettre le message avec le nouveau
type (ACK) vers le client.
1.6 Simulation du systme
1. Lancer Build File pour les trois fichiers source et Build Project par la suite.
2. Effectuer lexcution (Touche F5) et vrifier le fonctionnement du programme. On peut
faire appel aux points darrts pour vrifier lexcution de chaque tape dchange de
messages.
3. Pour visualiser graphiquement les dtails de cration de threads et messages, et
dchange de messages, afficher la fentre VDK State History partir de View\VDK
Windows\History pour visualiser lenchanement des diffrentes oprations effectues.
4. Commenter le rsultat affich dans la fentre VDK State History .

Avril 2014, SUPCOM K. Grati & F. Rouissi

Page 10 sur 11

Pratique de la programmation et des OS Embarqus

Figure 12
12. Fentre VDK State
State History

Avril 2014, SUPCOM K. Grati & F. Rouissi

Page 11 sur 11