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.

  1. Transférer vos fichiers sur un stockage externe à la carte.
  2. Supprimer tout vos fichiers de la carte.
  3. Appelez la commande history -c
  4. 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.

buttons.png

Figure 1: Les connexions de bouttons

Leds.png

Figure 2: Les connexions de Leds

uson.png

Figure 3: Les connexions du capteur ultra-son

accéléromètre.png

Figure 4: Les connexions de l'accéléromètre

analyseur_logique.png

Figure 5: Les connexions de l'analyseur logique

moteur.png

Figure 6: Les connexions du moteur

La correspondance entre broches et GPIO Linux est spécifié à travers la figure :

pin_gpio.png

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.

Author: Houssam-Eddine ZAHAF

Created: 2021-12-15 mer. 19:53

Validate