TP2 : Signaux


Mise en situation
Le travail de ce TP se déroule seul.
Temps alloué : 6h
La programmation se fait sur PC sous Eclipse. Compilation croisé
Carte Acturus, Processeur Coldfire Motorolla.
|
Objectif
- Programmation multi-processus (vfork, execl, signal).
- C3.7 Validezl’organisation des tâches d’une application temps réel.
- C4.4 Ecrire les tâches d’une application
|
Pré requis
Initiation à la compilation croisée m68k, création d’un processus.
Prise en main de la chaîne de développement de la carte Acturus
|
Travail demandé
Listing commenté.
|
Critères d’évaluation
Autonomie, apprentissage d’un nouvel environnement de travail, maîtrise de la commande vfork et signal/kill.
|
But :
Le système Ravoux possède une platine de commande :

A l’aide du
TP1, mettre en œuvre un deuxième processus supervisant les boutons Marche/Arrêt et la lampe Marche.
Enoncé :
- Le processus père crée les 2 processus et se met en attente de fin de programme.
- Le processus pupitre attend l’action sur le bouton Marche, allume la lampe Marche, envoie un signal d’action au 2em fils et se met en attente (active) sur le bouton Arrêt. Quand celui-ci est actionné, envoie un 2em signal au processus tapis et revient en attente sur le bouton Marche.
- Le processus tapis gère le tapis quand il reçoit le signal Marche.
- Met en marche le tapis.
- Attends un pot grâce au capteur B1.
- Stoppe le moteur tapis quand B2 est actionné pendant 5s simulant le remplissage du pot et redémarre le tapis.
- Quand il reçoit un signal du processus pupitre, arrête le moteur et revient au début de l’algorithme.
Déroulement du TP :
Utiliser un kit Acturus local avant de tester sur le Ravoux.
- Créer le 1er prg père qui crée les 2 fils (Attention, un seul père. Attention à l’ordre pour passage de paramètres) qui affiche juste « Je suis fils N° » toutes les secondes (sleep). Boucle infinie.
- Faire attendre le père sur une entrée clavier, quand le père reçoit le caractère Q, il tue ses 2 fils par envoi d’un signal et le programme se termine.
- Enlever le sleep du filsTapis, et remplacer le par une pause. Le filsTapis sera réveillé par un signal envoyé par le filsPupitre toutes les secondes.
FilsPupitre FilsTapis
signal...
while(1) while(1)
{ … { ...
sleep(1) ; pause();
kill… allume ou éteint une led
} }
- Remplacer le sleep par la gestion du bouton et lampe Marche.
- Ecrire l’algorithme de remplissage de pots.
- Gérer le bouton d’Arrêt.

