TP3 : Programmation multi-tâche avec pthread
Table of Contents
1 Objectif et consignes :
1.1 Objectifs pédagogique
L'objectif de ce TP est de se familiariser avec les programmation de système dans Linux, notamment la manipulation du temps, la programmation multi-tâche et parallèle avec pthread et finalement la synchronisation.
1.2 Objectif du TP:
Dans ce TP nous allons réaliser un système d'alerte de proximité grâce à un capteur ultra-son. Le lien vers la datasheet de ce capteur est disponible sur ce lien.
1.3 Consignes
20 minutes avant la fin de chaque TP.
- Transférer vos fichiers sur un stockage externe à la carte.
- Supprimer tout vos fichiers de la carte.
- Appelez la commande history -c
- Exécutez la commande "sudo shutdown now"
Le compte rendu sera remis à la fin de la deuxième séance du cours avec le code de la plate-forme que vous avez développé.
2 Préparation de la carte (Un petit rappel de réseau) :
Connectez votre Jetson Nano et avec votre machine via un des câbles Ethernet bleu. Puis, ouvrez un terminal (ctrl+shift+T ou dans le menu utilisateur) sur votre machine desktop (Utilisez la machine non connectée au réseau de l'université).
Vous allez commencer par configurer la machine hôte afin de la connecter à votre carte Jetson Nano. Exécutez la commande suivante, pour définir l'adresse IP de votre machine hôte (NB: X est le numéro de votre Jetson Nano, noté sur le boîtier et au dessous de la carte).
sudo ifconfig eno1 192.168.1.(X+100)/24 up
Sur votre carte Jetson Nano est installé un serveur Secure SHell ssh, permettant de se connecter à votre carte. Nous allons l'utiliser pour réaliser ce TP. Le mot de passe de votre compte vous a été communiqué par votre enseignant.
Pour se connecter à votre carte Jetson Nano, vous allez exécuter le code suivant:
ssh [utilisateur]@192.168.1.X
3 Présentation de l'extension de la Jetson Nano :
La carte Jetson Nano, dont vous disposez, est équipée d'une extension permettant de la lier avec un certain nombre de capteurs est d'actionneurs, explicitement : (i) un analyseurs logique, (ii) un moteur, un capteur ultra-son, un accéléromètre et gyroscope, une suite de LED et deux boutons.
Chacun de ces composants est lié à une liste de broches GPIO de la carte Jetson Nano. Dans les figures ci-dessous vous trouvez les schémas de câblage des différents capteurs et actionneurs avec la carte.
Figure 1: Les connexions de bouttons
Figure 2: Les connexions de Leds
Figure 3: Les connexions du capteur ultra-son
Figure 4: Les connexions de l'accéléromètre
Figure 5: Les connexions de l'analyseur logique
Figure 6: Les connexions du moteur
La correspondance entre broches et GPIO Linux est spécifié à travers la figure :
Figure 7: Les correspondances Broche-GPIO
4 Manipulation du temps :
La première étape du TP est de réaliser les différentes fonctions de manipulation du temps dans Linux. Ainsi, vous aller implanter les fonctions suivantes dans le fichiers utimes.h et utimes.c:
// Convertie un timespec à une valeur de temps en mellisecond long timespec_to_micros(const struct timespec *t); // Ajoute le timespec a au timespec b et mette le résulat dans le timespec res void timespec_add(const struct timespec *a, const struct timespec *b, struct timespec *res); // Soustrait le time special A - B et rend le résultat dans res void timespec_sub(const struct timespec *a, const struct timespec *b, struct timespec * res);
5 Cahier de charge :
Vous devez implanter un système temps réel qui se charge de : lire les données du capteur ultrason, et en fonction de la proximité du système du sol, une alerte sur les leds doit retentir. Cette dernière sera réalisée sur les 4 leds, comme suit :
- aucune led allumée si la distance est supérieur à 80.
- 1 led qui clignote si la distance est entre 60 et 80.
- 2 leds qui clignotent si la distance est entre 40 et 60.
- 3 leds qui clignotent si la distance est entre 20 et 40
- 4 leds qui clignotent si la distance est inférieure à 20, dans cette situation le moteur est déclenché pour préparer une remonter.
Pour réaliser ce là, nous d'abord utiliser la plate-forme de programmation des GPIO que vous avez développé le TP passé. (Une version fonctionnelle peut être téléchargée sur ce lien).
- Modifier votre Makefile file pour ajoute cette nouvelle plate-forme avec vos fonctions de manipulation de temps.
- Tester la plate-forme en générant un signale carrée
- Proposez une architecture fonctionnelle de votre système : cette architecture doit spécifiées les threads, et leurs communications. Validez cette dernière avec votre enseignant.
On va maintenant implanter cette architecture fonctionnelle dans les fichiers threads.h et threads.c.
- Créez un premier thread qui envoie un signale de 10 microseconde sur la broche TRIGGER.
- Vérifiez si le capteur répond sur la broche echo sur votre osciloscoppe.
- Créez un thread qui traite le signale echo.
- Créez un thread qui effectue de la signalisation en cas de proximité de la surface du sol.
- Protégez les variables partagées avec les mutex.