Formation PEGASE : La plate-forme wireless du LCPC Formation à l'utilisation de PEGASE : Plate-forme Experte Générique pour Applications Sans-fil Embarquées Vincent Le Cam ( Mathieu Le Pen William Martin Laurent Lemarchand ) Ingénieur de recherche, enseignement et expertise Responsable de la Cellule Électronique et Informatique Industrielle (CEII) Département MACS (Mesure Auscultation Calcul Scientifique) IFSTTAR Version V3.0 Novembre 2011 Tous droits réservés 1
Formation PEGASE sur 3 jours - Sommaire : Journée 1 Contexte / Découverte / Prise en main 1. Rappels des objectifs de la formation (10 mn) 2. Présentation et cours généraux (½ j) - Électronique sans-fil et OA - Contexte de PEGASE (Cours de V. Le Cam) - Les systèmes GNU/ Linux (Cours de Ph. Le Gal) - Le noyau Linux et les pilotes de périphériques / drivers (Cours de Ph. Le Gal) - Langage C : un tutoriel et quelques grands rappels 3. Mise en route et découverte de PEGASE (½ j) - Appropriation des principales fonctions et caractéristiques physiques et logicielles 2
Formation PEGASE sur 3 jours - Sommaire : Journée 2 Découverte et modification des exemples Mes premières applications sur PEGASE 4 - Exécution et modification des programmes d'exemple fournis dans le kit PEGASE (½ j) Présentation du contenu de la librairie PEGASE Focus sur le fonctionnement évènementiel : mécanisme des Callbacks Mise en œuvre et modification des programmes d'exemple 5 - Développement d'applications orientées métier (1,5j) Application 1 : «Envoi TCP/IP/WiFi de données d'un capteur (Accéléro MEMS3D) vers un Superviseur en Labview» Application 2 : «Sensor GPS : envoi d'alarme SMS/GSM sur détection de déplacement GPS. Serveur TCP/WiFi». Mise en oeuvre d'un automate d'état Application 3 : «Mise en œuvre des fonctions DSP: FFT, min/max/mean, etc.» 3
Formation PEGASE sur 3 jours - Sommaire : Journée 3 Développement d'applications sur PEGASE Etude de vos use-case 5 - Développement d'applications orientées métier (1,5j) Application 4 : «Mise en oeuvre du watchdog sur PEGASE» Application 5 : «Utilisation de la librairie XML sur PEGASE» Application 6 : «utiliser la carte fille 8 voies d'entrées analogiques : GBF en entrée + FFT + envoi TCP vers un serveur Labview» Application 7 : «Customiser le serveur web intégré sur PEGASE» Application 8 : «PEGASE et l'énergie : autonomie, CSolarManager, etc.» Application 9 : «Développer en C++ sur PEGASE» 6 Debugage d'applications : gdb, cross-debugage, manip,... 7 Étude de vos use-case (1h)... 4
PARTIE 1 PARTIE 1 : «Rappels des objectifs de la formation» 5
1 - Rappel des objectifs de la formation : Objectifs: Présenter le concept PEGASE en détail Rendre utilisateur capable d'installer et d'utiliser la plateforme PEGASE en qqs heures dans son labo A tout le moins : le savoir nécessaire pour comprendre et maintenir une application sur PEGASE Transfert de connaissance IFSTTAR<=> RST, Ecoles, Universités, entreprises... Un avoir faire plus général que le simple cadre PEGASE : développement en C en Linux l'embarqué. Connaissances applicables pour de nombreux autres systèmes Pour un public averti : Sensible à (ou aime) l'électronique, l'info. Indus., embarqué... Connaît (ou pourrait) le minimum vital du linux : ls, man, gcc... Connaît (ou devra) savoir développer en C standard...voire en C++ 6
PARTIE 2 PARTIE 2 : «Présentation et cours général» 7
2 - Présentation et cours général 1) Présentation générale de : - «Électronique sans-fil et ouvrages d'art» 1h (cours V. Le Cam) 2) Présentation générale de : - «Les systèmes GNU/ Linux» 3/4h (cours de Ph. Le Gal) 3) Présentation générale de : - «Le noyau Linux et les pilotes de périphériques» 1/2h (cours de Ph. Le Gal) 4) Le Langage C : (1/2h) (Mathieu Le Pen) - THE tutoriel de référence : "Le Langage C" / Richie et Kernighan - Quelques grands rappels sur le langage C 8
2 - Présentation et cours général Il existe de très nombreux tutoriels sur le langage C sur internet! Pages de Man : > man Sous Google Exemple : http://www.siteduzero.com/tutoriel-3-14189apprenez-a-programmer-en-c.html 9
2 - Présentation et cours général C-Rappel : if/else 10
2 - Présentation et cours général C-Rappel : do-while 11
2 - Présentation et cours général C-Rappel : for 12
2 - Présentation et cours général C-Rappel : printf 13
2 - Présentation et cours général C-Rappel : open/close/read/write 14
3 - Mise en route et découverte de PEGASE PARTIE 3 : «Mise en route de PEGASE» 15
3 - Mise en route et découverte de PEGASE Préambule : Tout au long de la formation (et après dans votre labo), toujours se référer au Guide Mise en Oeuvre de PEGASE Version V1.F : 16
3 - Mise en route et découverte de PEGASE En suivant le «Guide de Mise en Oeuvre de PEGASE V1.F» (G.U. = Guide Utilisateur) \ chapitre 3 «Démarrage rapide» : Connecter PEGASE à une source 8/24 V Relier PEGASE à votre PC par un cordon RS232 / USB Configurer un outil de gestion des ports com sur PC : minicom -s configurer à: 115200 bauds 8N1 Lancer: minicom Faire vérifier le câblage par le formateur Mettre sous tension Observer la séquence de boot de PEGASE 17
3 - Mise en route et découverte de PEGASE Booter et re booter la carte (bouton reset) ou taper reboot Détecter la séquence du boot loader A quoi sert-elle? Explications du formateur Voir dans le G.U. Le partitionnement de PEGASE ( 5.2). Explications Se promener sur la carte, vérifier les commandes Linux de base : cd /lcpc ls -l cat /version echo toto Etc. Avec «l'aide mémoire des commandes Unix», vérifier que vous retrouvez les grands principes d'un système Linux. 18
3 - Mise en route et découverte de PEGASE Vérifier le partitionnement de PEGASE expliqué en 5.1 du G.U. La partition mtd1 est la partition de boot (volatile) La partition mtd2 est la partition métier (pérenne) Créer un fichier dans «/» : Echo test1 > foo1 Créer un fichier dans «/lcpc» : Echo test2 > foo2 Rebooter la carte Tentez de retrouver les fichiers «foo1» et «foo2» Que s'est il passé??? Si votre application doit générer et stocker des fichiers de données, où enregistrer vos fichiers de data? Où placer votre future application «Monitoring.exe»? 19
3 - Mise en route et découverte de PEGASE /lcpc : bien se rappeler que ce n'est pas un répertoire comme les autres (pointe sur une mémoire FLASH) Contrairement à «/XXX», LCPC pointe sur la FLASH et non la RAM (mtdblock2) Il est donc pérenne (rappel) Il est propre à PEGASE (produit @ Ifsttar ) et il est créé volontairement pour y stocker des applications et des données Préparer un sous répertoire de travail de votre choix : «mkdir APPLI» «cd APPLI» «echo c parti > foo» Rebooter PEGASE Retourner dans /LCPC/APPLI Afficher foo «cat foo» Is it OK??? 20
Mise en route de PEGASE Découvrir les autres principaux répertoires de la distribution Linux sur PEGASE : /bin : explorer et retrouver tous les binaires que vous utilisez sous le Linux embarqué sur PEGASE Principales commandes Linux : ls -l, cd, ifconfig,... Les fichiers Example_XXX Comment LINUX sait que les binaires se trouvent ds ce rép.? Afficher et comprendre la valeur de la variable système : PATH En tapant la commande: echo $PATH Idem sur tout PC sous Linux Aller dans le répertoire /proc et afficher le contenu du fichier meminfo cat /proc/meminfo Contenu = informations importantes sur taille de la RAM Similairement, taper : free 21
3 - Mise en route et découverte de PEGASE /xxx : explorer rapidement les autres répertoires à la racine de «/» (autres que «/LCPC») Noter que : il s'agit des sous-répertoires classiques d'un système Linux (ici d'un uclinux adapté à PEGASE) Sur votre PC sous Linux (ex. : Ubuntu) : retrouver ~ les mêmes répertoires, ~les mêmes commandes, et même logique d'arborescence universelle des systèmes GNU/Linux (cf. le cours) Analogie : Systèmes Linux 22
3 - Mise en route et découverte de PEGASE A la racine «/» : afficher le contenu du fichier «version» «cat /version» Qu'affiche ce fichier selon vous? A quoi correspondent la date et l'heure affichées? Dans /lcpc : afficher puis compléter le contenu du fichier «autorun.sh» en suivant la question Q2 de la FAQ du GU (P.53) root:/> cat /lcpc/autorun.sh root:/> cat >> /lcpc/autorun.sh echo cette formation PEGASE est super <Entrée> ifconfig ps <Ctrl + C> root:> Rebooter Que se passe -t-il? A quoi sert ce fichier selon vous? Pour bien comprendre : afficher le contenu de «rc» : cat /etc/rc 23
3 - Mise en route et découverte de PEGASE Découvrir les autres principaux répertoires de la distribution Linux sur PEGASE Zoom sur un répertoire important : /dev /dev => «Devices» = matériels / périphériques Aller dans «/dev» et lister le contenu «ls -l» Retrouver des périphériques qui ont été présentés sur PEGASE: Les timers :... Le port SPI :... Le port I2C : null Les ports flags : sous quels noms retrouve-t-on les 48 GPIO? Les 2 ports série : ttybf0 et ttybf1 A quoi correspond le dev «console» Faire «echo salut > /dev/console» depuis un Terminal en Telnet et regarder ce qui se passe sur un Terminal avec Minicom Faire «echo bonjour > /dev/ttybf0» Que se passe-t-il? Comment l'expliquer? Qu'est ce qui est câblé «en dur» sur ttybf1? 24
3 - Mise en route et découverte de PEGASE Zoom sur un répertoire important /dev Piloter une ou plusieurs leds à la main, en 2 lignes de shell : Tout dabord décharger le driver gérant les leds: rmmod leds-lcpc Allumons une led à la main sur la carte fille de debug A partir du G.U. Annexe 2 «Schémas de la carte fille de debug», repérer le GPIO correspond à l'une des 6 leds Ex. : pg10, pg6, quels sont les 4 autres :...? Écrire un 0 (logique inversée) sur le port flag «echo 0 > /dev/pg10» Que se passe-t-il? Étendre le test Eteindre la led avec la commande : «echo 1 > /dev/pg10» 25
3 - Mise en route et découverte de PEGASE Zoom sur un répertoire important /dev Piloter une ou plusieurs leds à la main, en 2 lignes de code C : En faisant «echo 0 > /dev/pg10» : appel implicite au driver pilotant les port flag : lcpc_pflags Pour voir la liste des drivers chargés, taper : lsmod Observer les dépendances L'équivalent en langage C serait : int fd = open (''/dev/pg10'') ; write( fd, ''0'', sizeof(''0'')) ; close( fd) ; Et pour lire l'état d'un port flag char state[1] ; int fd = open (''/dev/pg10'') ; read ( fd, state, sizeof(state)) ; close( fd) ; 26
3 - Mise en route et découverte de PEGASE Sous linux, en langage C (ou autre), noter que tout passe par l'utilisation de file descriptor (int fd) Utilisation d'un périphérique dans /dev : /dev/timer6 /dev/pf8 Accès à un fichier physique (file*) Utilisation d'un pipe (communication inter-processus) Utilisation d'une socket (communications IP) /dev/spi... Utilisation, essentiellement de 5 commandes pour piloter une fd: open, close, read, write ioctl 27
3 - Mise en route et découverte de PEGASE Découvrir les autres principaux répertoires de la distribution Linux sur PEGASE Zoom sur un répertoire important : /dev /dev => «Devices» = matériels / périphériques Test rapide du port ttybf1 routé sur le module GPS de Pegase Vérifier la bonne réception des trames GPS en : Allumant le module GPS (sortie du Standbye, éteint par défaut, voir autorun.sh) echo 1 > /dev/pg0 En configurant le port série 1 à 4800 bauds stty -F /dev/ttybf1 4800 En redirigeant les trames reçues sur ce port sur la sortie standard root:/bin> cat /dev/ttybf1 $GPGGA,,4709.35974,N,00138.26703,W,7,00,,,,,,,*44 $GPVTG,,,,,,,,,M*33... 28
3 - Mise en route et découverte de PEGASE AIDE sous Linux : MAN (Manuel) «Aide-toi et Linux t'aidera» «man read» «man ls» «man...» Pour des questions de taille, le man n'est pas implémenté sur PEGASE. Utiliser le man du PC de développement (Ubuntu) 29
3 - Mise en route et découverte de PEGASE Options : commande -help (ou :?, -h...) «Aide-toi et Linux t'aidera» Systématiquement, penser à solliciter une commande avec l'option help y compris sur uclinux - PEGASE: «cp -help» «ftp -help» «ls -?»... 30
3 - Mise en route et découverte de PEGASE Découvrir l'activité linux de la carte PEGASE Taper la commande ps pour voir l'ensemble des processus qui tournent par défaut sur PEGASE Retrouver quelques processus et identifier leur rôle respectif : «boa» «inetd» «ps» Commande «netstat -a» Commande «free» pour la mémoire dispo Lancer la commande top. Quelle information a priori intéressante obtient-on? Faire CTRL+C pour l'arrêter. Lancer la commande top en parallèle de votre interface de commande (soit suivie d'un &) : «top&» Relancer ps. Identifier le numéro de processus de top Arrêter (tuer un processus) top avec la commande kill : «kill -9 numero_pid_top» 31
3 - Mise en route et découverte de PEGASE PASSER AU MONDE RESEAU (IP) DE PEGASE Objectif : DECOUVRIR et UTILISER LES CAPACITES DE PEGASE A COMMUNIQUER EN IP (WiFi) - Bénéficier de la force de l'internet Protocol (IP) - Linux et IP font très bon ménage! Rappel du positionnement de l'ip et du Wifi 32
3 - Mise en route et découverte de PEGASE Sur PEGASE (comme souvent en embarqué) : - Le Port RS232 n'est que l'interface par défaut ( «/dev/console») - C'est un lien de communication local, point à point (PC PEGASE) distances limitées (qqs m) Port RS232 Port RS232 - En TCP/IP, par des connexions Telnet, FTP, SSH... fonctionnement en réseau, communications point à multipoints, distances illimitées. On va ouvrir une session!... TCP/IP --WiFi 33
3 - Mise en route et découverte de PEGASE Etape 1 : Suivant les indications du paragraphes 5.4 «Réseau» du G.U. Éditer et vérifier le contenu du fichier de configuration «cat /lcpc/wifi.conf» Relever l'adresse IP de votre carte PEGASE : «ifconfig» Faire un test de connectivité depuis votre PC sous Ubuntu en faisant un ping «ping @IPMaCartePegase» Exemple : «ping 192.168.0.205»...ou un ping de votre carte vers votre PC...ou un ping de votre PC sur la carte du voisin... on est dans le même LAN (Local Area Network) 34
3 - Mise en route et découverte de PEGASE Etape 2 : Débrancher le cordon série reliant PEGASE au PC Ouvrir une session Telnet sur votre carte PEGASE. Typiquement: «telnet 192.168.0.xxx» Ouvrir une session SSH sur votre carte PEGASE «ssh root@192.168.0.xxx» Ouvrir une session FTPsur votre carte PEGASE «ftp 192.168.0.xxx» Fournir les paramètres du compte utilisateur (unique sous uclinux mais paramètrables : commande passwd): login = root Password = uclinux 35
3 - Mise en route et découverte de PEGASE Etape 3 : Comprendre le caractère réseau, l'abstraction de l'ouverture de session à distance La connexion se fait via le WiFi, la carte -moyennant la portée de l'access Point WiFipourrait se trouver sur le toît du bâtiment (i.e. en «haut du pont»). Fort non? Depuis la session Telnet ouverte sur votre PEGASE depuis votre PC, créer un fichier contenant votre nom «echo Martin > /lcpc/nom» En suivant le G.U. ($5.5.1) depuis la session Telnet sur votre PEGASE Ouvrir une autre session Telnet sur la PEGASE du binôme voisin. Editer le fichier «nom» de la carte voisine. Saisir la commande «reboot -d 10». Partir en courant. 36
Mise en route de PEGASE Etape 4 : se familiariser avec les commandes réseau Linux : Tester la présence dans le même sous réseau IP d'une autre machine IP : «ping 192.168.0.XXX» Connaître son adresse IP, sa configuration IP et son adresse MAC logiciellement : «ifconfig». Sur PEGASE à quoi correspondent les interfaces «lo» et «wlan0»? faites de même sur le PC... Connaître sa configuration WiFi à un instant T, vue de PEGASE : «iwconfig». Identifier et comprendre les principaux champs : ESSID - Bit rate Mode - Link Quality Access Point 37
3 - Mise en route et découverte de PEGASE Etape 4 (suite) : depuis PEGASE (et même depuis le PC sous Ubuntu) scanner les réseaux WiFi visibles depuis PEGASE à un instant T. Saisir la commande : «iwlist wlan0 scanning» Quels réseaux obtenez vous? Quelles caractéristiques peut on retrouver? 38
3 - Mise en route et découverte de PEGASE Etape 5 : suivant les indications du paragraphes 5.5 «Services réseau de PEGASE» du G.U. tester les services FTP et SSH depuis votre navigateur Nautilus => très pratique pour transférer les fichiers entre PC et PEGASE 39
3 - Mise en route et découverte de PEGASE Etape 5 : encore plus pratique pour le FTP => FireFTP, pluggin de Firefox 40
3 - Mise en route et découverte de PEGASE Avec SSH: 41
3 - Mise en route et découverte de PEGASE Etape 6 : suivant les indications du paragraphes 5.5.4 «Services réseau de PEGASE» du G.U. Passer en revue les différentes pages du serveur web embarqué de PEGASE PEGASE possède nativement un serveur web embarqué «boa». Pour y accéder : simplement saisir l'url (= adresse IP) de votre carte PEGASE dans votre navigateur Firefox (ou autre) 42
Mise en route de PEGASE Serveur Web PEGASE : page d'accueil Retrouver le contenu du fichier «version» 43
3 - Mise en route et découverte de PEGASE Serveur Web PEGASE : afficher la configuration WiFi Vérifier le ESSID du réseau WiFi Vérifier l'adresse MAC (résultats de la commande iwconfig) 44
Mise en route de PEGASE Serveur Web PEGASE : modifier la configuration WiFi Résultat de la commande «iwlist wlan0 scanning» Vérifier la cohérence avec la connexion WiFi de PEGASE Rappel est donné sur le DHCP et DHCP statique. Tester la modification de la configuration IP de votre PEGASE en imposant une adresse IP (donnée par le formateur) à la place d'une obtention par DHCP. Rebooter et tester. 45
3 - Mise en route et découverte de PEGASE Serveur Web PEGASE : page de démarrage / autorun.sh Retrouvez-vous bien votre customisation précédente : ajout à la main (cat >>autorun.sh) de commandes dans ce fichier? Formateur : description des différents commentaires et options dans ce fichier Customisez encore ce fichier et rebooter et observez le résultat 46
Mise en route de PEGASE Serveur Web PEGASE : éditer un fichier Saisir le chemin complet d'un fichier que vous avez créé précédemment pendant le TP. «/lcpc/wifi.conf» 47
3 - Mise en route et découverte de PEGASE Serveur Web PEGASE : page des processus Encapsulation de la commande «ps» Tester le kill du processus «boa» Qu'obtenez vous d'intéressant? 48
3 - Mise en route et découverte de PEGASE PEGASE et l'energie: 49
3 - Mise en route et découverte de PEGASE Scripts utiles vis à vis de l'énergie de PEGASE : Le G.U. donne le bilan détaillé de la consommation de PEGASE en 2.2 suivant l'activité des périphériques utilisés à un instant T: 3 périphériques peuvent être manipulés en ce sens (cf 5.8): Le module WiFi : ON / OFF Souvent utile de le mettre OFF lorsque la connexion permanente n'est pas nécessaire (ON par défaut) Le module GPS : ON / OFF Sauf si haut niveau de synchronisation requis et/ou localisation nécessaire pour l'application, peut être mis OFF (cas par défaut) Le processeur Blackfin 537 itself Peut être endormi pour un temps donné (plus de traitement, plus d'acquisition) pour les applications à échantillonnage lent Modification de la fréquence cœur (CCLK) pour travailler à 500 ou 250 MHz 50
3 - Mise en route et découverte de PEGASE Le module WiFi : ON / OFF Deux scripts permettent d'allumer/éteindre à tout moment le module WiFi (~100 mw) en ligne de commande ou depuis le code C d'une application métier (system (''ma commande'');) Éteindre le module WiFi (tester avec la liaison minicom) : root:~> wifi_down.sh Allumer le module WiFi (tester avec la liaison minicom) : root:~> wifi_up.sh Enchaîner plusieurs fois les commandes. Vérifier la diff de conso sur le bloc d'alim Vérifier la bonne reprise du service réseau IP/WiFi 51
3 - Mise en route et découverte de PEGASE Le module GPS : ON / OFF Le module GPS (~ 120 mw) peut être allumé / éteint directement en pilotant le GPIO : /dev/pg0 La broche de reset du module GPS «echo 1 > /dev/pg0» (allumer = défaut dans autorun.sh) «echo 0 > /dev/pg0» (éteindre) mais le mieux sera de la tester depuis du code C avec l'exemple : Example_HeureAbsolue et son mode 3 Explication du principe du GPS On/Off (ie. Mode 3 de la Classe CHeureAbsolue de la Lib PEGASE) Tester en lançant «Example_HeureAbsolue» 52
3 - Mise en route et découverte de PEGASE Le processeur Blackfin 537 : Peut être endormi pour un temps donné (plus de traitement, plus d'acquisition) pour les applications à échantillonnage lent ou rare En ligne de commande (ou depuis du code applicatif C ) avec la commande : Tester : «pegase-sleep.sh 10» Ainsi le processeur s'endort 10 secondes Modification de la fréquence cœur (CCLK) pour travailler à 500 ou 250 MHz En ligne de commande (ou depuis du code applicatif C ) avec la commande : «cpufreq-info» «cpufreq-set -f 250M» attention! 53
3 - Mise en route et découverte de PEGASE PEGASE et l'energie : Pour aller plus loin et réaliser un système autonome : Voir le 5.8 du Guide Utilisateur Il existe déjà des systèmes Pegase autonome sur PS avec solution au cas par cas (bilan énergétique). CF spécifique. Bientôt une carte fille intermédiaire (sandwich) dédiée à l'énergie et générique! Pour un kit Pegase clé en main, autonome 54
3 - Mise en route et découverte de PEGASE Customiser et reflaser son propre noyau pour PEGASE : DEMO VLC: - Modif noyau : plus de ttybf1! - Modif user space : ajout de Dungeon - Modif user space : ajout Gdb Server 55
4 - Exécution et modification des programmes d'exemple PARTIE 4 : 56
4 - Exécution et modification des programmes d'exemple Généralités sur les prgs d'exemple fournis: Les exemples servent unitairement à tester un port (RS232,SPI,...) ou un service (socket IP,...) Avec leur code source, ils permettent une prise en main rapide par le nouveau développeur Contribue au caractère générique de PEGASE Ils utilisent massivement la librairie PEGASE Disponibles sous : «.../pegase/uclinux-dist/user/pegase-test» Allons les observer rapidement ensemble A copier /coller absolument! 57
4 - Exécution et modification des programmes d'exemple Quelques mots à propos de la «libpegase» A quoi sert-elle? Fournir un ensemble de classes encapsulant l'utilisation d'un port ou d'un service. Gain de code (i.e. de temps) standardisation. Code source fourni Chaque classe permet, en général de : ouvrir, configurer, écrire, obtenir des datas, fermer... le port (device) ou le service Réutilisabilité et portabilité du code métier Que contient-elle? + de 11 classes prêtes à l'emploi (à instancier) + 3 drivers LCPC Écrites en C-objet : se rapprocher au max. de la Programmation Orientée Objet Pour chaque flux entrant : un mécanisme de callback (voir ci après) permettant d'écrire des application simples et fonctionnant sous IT. 58
4 - Exécution et modification des programmes d'exemple Réflexe à avoir : lire le.h de la classe nécessaire Tout fichier.h est commenté en détail: Sur le PC, aller dans : «.../V1F/pegase/uClinux-dist/lib/pegase/include» Ouvrir et analysons ensemble une classe type CPortSPI : CPortSPI.h 59
4 - Exécution et modification des programmes d'exemple Objectif et fonctionnement du mécanisme de callback : Comment le code C (métier) peut savoir que des données arrivent sur le port concerné (Uart, SPI, PortFlag en input,...)??? Par une utilisation judicieuse de thread (mettant en œuvre un processus parallèle de lecture bloquante du port concerné), une fonction utilisateur, passée à la classe (SetCallBack) est exécutée lorsque de la data arrive. Résultat : l'utilisateur peut développer des applications au fonctionnement évènementiel. Les principaux traitements (bufferisation, mise en fichier, FFT,...) peuvent être calés «Sur réception de données» du port (RS232, SPI...) = interruptions logicielles 60
4 - Exécution et modification des programmes d'exemple Mécanisme de callback. Exemple opérationnel en 10 lignes: Analysons et commentons ensemble l'exemple Uart dans : «.../V1F/pegase/uClinuxdist/user/pegasetest/Example_Uart.c» 61
4 - Exécution et modification des programmes d'exemple Passage en revue de la Lib PEGASE (cf Guide en $6.2): CLed assure le pilotage des Leds disponible sur les cartes filles. Cette classe permet de piloter les leds disponible dans le dossier système «/sys/class/leds/», le driver «leds_lcpc» permet de déclarer les six leds courrament utiliser sur les cartes filles. Le driver est chargé avec la commande suivante : # modprobe leds_lcpc CUart permet d ouvrir et configurer rapidement les ports séries disponibles sur la carte PEGASE d origine (ttybf0, ttybf1). Ou bien étendu par la carte fille spécifique, dans ce cas il est nécessaire de charger le driver «8250_lcpc» avec lacommande suivante : # modprobe 8250_lcpc Callback sur réception des données 62
4 - Exécution et modification des programmes d'exemple Passage en revue de la Lib PEGASE : CTimer permet de piloter les 8 timers physiques du Blackfin. Les modes de fonctionnements sont: capture, PWM et interruption périodique (Callback) de précision. CPortFlag permet de piloter les 48 ports d entrées-sorties tout ou rien du Blackfin. Les entrées peuvent être configurer comme source d interruption afin de rendre le programme événementiel. Cette classe possède deux constructeurs qui permet de configurer le GPIO suivant le mode de fonctionnement souhaité, source d interruption (Callback) ou port d entrée/sortie. CServerTcpIP met en place un serveur multi-client TCP/IP. L utilisateur peut y enregistrer une fonction de traitement des données afin de créer un protocole qui est propre a son application. 2 Callbacks possibles : connexion, réception de données CClientTcpIP permet de créer une connexion client vers un serveur TCP/IP. Cette classe permet de configurer le «keep-alive» de la connexion TCP, ainsi que la reconnexion automatique en cas de fermeture non désirer de la connexion par le serveur. 63
4 - Exécution et modification des programmes d'exemple Passage en revue de la Lib PEGASE : CGPS assure le décodage des trames NMEA issue du récepteur GPS Copernicus intégré à PEGASE. Callback possible sur réception de GGA CHeureAbsolue assure la datation à l aide de la classe CGPS et de la synchronisation à l aide du PPS du module GPS. Elle permet aussi d obtenir une estimation de l erreur du quartz et d'en tenir compte pour se synchroniser à qqs µs CPortSpi driver générique pour le port SPI. Cette classe permet une lecture DMA sur un bus SPI. Elle est typiquement utilisée pour lire les données provenant de CAN. Il est nécessaire de charger le driver «lcpc_can_spi» avec la commande suivante : # modprobe lcpc_can_spi Callback sur réception de blocks d'échantillons Exemple : carte fille du CASC 64
4 - Exécution et modification des programmes d'exemple Passage en revue de la Lib PEGASE : CMax11046 pilote le convertiseur analogique-numérique «Maxim 11046 [5]» disponible sur une carte fille d extention. Il est nécessaire de charger le driver «lcpc_max11046» avec la commande suivante : # modprobe lcpc_max11046 CSolarManager gère un panneau solaire et le chargement d une batterie. La classe implémente un algorithme de MPPT (Maximum Power Point Tracker), afin de maximiser l énergie récupérée par un panneau solaire. 65
4 - Exécution et modification des programmes d'exemple Passage en revue de la Lib PEGASE : Pour info : IFSTTAR a développé ses propres drivers pour compléter des manques dans les drivers de base que propose les distributions Linux => grande expertise requise! lcpc_pflags : gestion des GPIO / Ports Flags. Datation à la µsec lcpc_max11046 : driver spécifique pour la carte fille 8 voies (CAN 8 voies Max11046) 8250_lcpc : driver spécifique pour la carte fille ajoutant 4 ports RS232 à PEGASE bfin_mac : driver spécifique pour la carte fille Ethernet ppp_async : driver spécifique pour des connexions PPP (modem GSM) leds-lcpc : driver spécifique pour des piloter les 6 Leds des cartes filles de PEGASE lcpc_can_spi : driver piloter un CAN SPI monovoie 16 bits Et surtout : lcpc_hwtimer : utilisé par les autres drivers (comm' inter drivers) qui assure la synchro de la carte PEGASE sur le GPS / PPS calcule la dérive du quartz et prise en compte pour datation! = synchro de PEGASE à ~4 µseconde UTC!!! 66
4 - Exécution et modification des programmes d'exemple Des exemples nombreux : Unitaires pour tester spécifiquement les ports d'e/s et la carte PEGASE À code ouvert pour s'inspirer. A copier / coller pour développer votre propre application Liste ~ exhaustive des exemples fournis dans.../pegase/uclinux-dist/user/pegase-test : Example_CMax11046 Example_CPortSPI Example_Gpio Example_Gpio_Write Example_TcpIP_Server Example_Timer_Period Example_Timer_PWM Example_Uart Example_Gps Example_HeureAbsolue Example_Led Example_SolarManager Example_TcpIP_Client Example_TcpIP_Client_KeepAlive Example_TcpIP_Client_Reconnect 67
4 - Exécution et modification des programmes d'exemple Rappel : la cross compilation Transfert - Codage (C) - Compilation pour cible Pegase (- Debugage) - Exécution (- Debugage) 68
3 - Mise en route et découverte de PEGASE Cross-Debugger ses applications sur PEGASE TODO : Evoquer GDB server William M. 69
4 - Exécution et modification des programmes d'exemple A vous de jouer! Tester sur PEGASE en exécutant quelques exemples : «Example_Led» et «Example_HeureAbsolue»,... Pour développer une application : Suivre scrupuleusement le G.U. «6 Développer ses propres application». Prendre le temps de lire au moins une fois $6.4 et $6.5 70
4 - Exécution et modification des programmes d'exemple Faire son applications en 1 minute et 6 étapes (rappel du Guide) : 1) Créer un répertoire de travail : mkdir myapp 2) Copier/coller le contenu du répertoire «.../V1F/pegase/uClinux-dist/user/pegase-helloworld» 3) Ouvrir le fichier «Makefile» et y apporter 2 modifs : Saisir PEGASEINSTALLDIR par votre chemin «.../V1F/pegase/» Saisir le nom de l'exécutable à générer : EXEC par «myapp» 4) Ouvrir un terminal en lançant open-terminal.sh dans : «.../V1F/pegase/open-terminal.sh» et retourner dans le répertoire de travail 5) Coder votre appli (C). Compiler en appelant «make» 6) Copier/coller (FTP, SSH) «myapp» sur PEGASE, le rendre exécutable et le lancer : root> chmod +x myapp root>./myapp 71
4 - Exécution et modification des programmes d'exemple Exercice 1 : Modifier le programme «Example_Led.c» - Ajoutez une boucle sans-fin (do while(1)) à la fin du prog. pour qu'il ne s'arrête pas - Par extension de ce qui existe, ajoutez le clignotement 2 fois par seconde (usleep(250000);) d'une autre led dans cette boucle - NB : pour les leds un ensemble de petites macro vous simplifie la vie 72
4 - Exécution et modification des programmes d'exemple Exercice 1 : Modifier le programme «Example_Led.c» (SUITE) - Ajouter ce qu'il faut dans «/lcpc/autorun.sh» pour que votre programme se lance automatiquement au démarrage de la carte et rende la main - Attention : mettre le fichier Example_led dans /lcpc! pourquoi? 73
4 - Exécution et modification des programmes d'exemple Exercice 2 : Modifier le programme «Example_Gpio.c» - Repérer la configuration de la Callback pour le Bouton Poussoir 1 - Afficher l'état BP2 sur pooling dans la boucle principale (while 1) - Compléter le code de la callback InterruptOnBp1 pour allumer ou éteindre la Led 2 uniquement sur chaque appui du Bouton Poussoir - Bien comprendre la différence entre la configuration du BP1 (en mode interrupt : Port Flag) et celle du BP2 (en mode GPIO) - Bien comprendre que le pooling est inenvisageable : vérifier avec top - Eventuellement généraliser à BP2 => Résultat : première approche avec le fonctionnement évènementiel. On Appui sur Bouton Poussoir (Port Flag) => Allumer Led 74
4 - Exécution et modification des programmes d'exemple Exercice 3 : Modifier le programme «Example_Uart.c» - Repérer l'ouverture et la configuration du COM1 (/dev/ttybf1) = GPS - Dans le source, allumer le module GPS en écrivant sur la pinosh de Standbye en C: system("echo 1 > /dev/pg0") ; /* ou avec un objet CGPIO */ - Pourquoi la configuration de l'uart est à 4800 bauds? - Modifier la callback pour afficher le contenu de la trame reçue via un printf - Eventuellement ajouter une boucle infinie dans le main pour que le prg ne s'arrête pas => Résultat : deuxième approche avec le fonctionnement évènementiel. On Réception trame RS232 (GPS) => Affichage à l'écran 75
4 - Exécution et modification des programmes d'exemple Exercice 4 : Modifier le programme «Example_TcpIP_Client.c» - Sur une PEGASE lancer le «Example_TcpIP_Server» - Copier/coller Example_TcpIP_Client.c pour : Vous connecter au serveur ( IP : 192.168.5.100, Port : 4500) envoyer régulièrement (dans le main()) une chaine de caractère au serveur => Résultat : deuxième approche avec le fonctionnement évènementiel. On Réception trame TCP/IP => Affichage à l'écran 76
4 - Exécution et modification des programmes d'exemple Exercice 5 : Modifier le programme «Example_TcpIP_Server.c» - Regarder et comprendre le contenu de l'exemple TcpIP serveur - Customiser pour faire un prg utilisant les 2 callback : - Afficher l'arrivée nouveau client : IP et port du client connecté - Customiser la callback de réception des données en faisant allumer/éteindre la led 3 sur réception d'un mot clé «PEGASE» - Sur réception de «PEGASE» renvoyer une chaine «mot de passe ok» au client - Tester en vous connectant à votre programme sur PEGASE depuis votre PC sous Linux (ou depuis une autre PEGASE) : «telnet 192.168.0.xxx 1234» => Résultat : troisième approche avec le fonctionnement évènementiel. - On Réception données TCP/IP => Affichage à l'écran, traitement personnel - Plusieurs Callbacks dans une même classes => plusieurs évènements 77
4 - Exécution et modification des programmes d'exemple Exercice 5 : Modifier le programme «Example_TcpIP_Server.c» VLC => Zoom sur la portabilité du code source! Le même code compilé sur le PC Fonctionne aussi bien Si compatibilité matérielle => compatibilité logicielle Capitalisation! 78
4 - Exécution et modification des programmes d'exemple Exercice 6 : Modifier le programme «Example_CMax11046.c» Intervenant : Mathieu - Regarder et comprendre le contenu de l'exemple prévu pour la carte fille 8 voies Compiler l'application - Repérer le paramétrage de la callback : «OnCallback» - On y reviendra plus tard en détail lors des «applications Métier» - Allons voir ensemble l'appli CASC mulitvoie => Résultat : quatrième approche avec le fonctionnement évènementiel. On Réception données sur le port SPI => Appel de la fonction OnCallback 79
Partie 5 : Développement d'applications métier PARTIE 5 : Développement d' applications orientée métier 80
Partie 5 : Développement d'applications métier Application 1 : «Envoi TCP/IP/WiFi de données du capteur C2 d'advitam (Accéléro MEMS3D + PT100) vers un Superviseur en Labview» Intervenants : Vincent + Laurent + William Objectif : se mettre dans le bain de PEGASE Interfacer un accéléromètre 3D de type MEMS et une PT100 Mettre en œuvre une comm TCP/IP Développer une application 'complète' 81
Partie 5 : Développement d'applications métier Application 1 : «Envoi TCP/IP/WiFi de données d'un capteur (Accéléro MEMS-3D) vers un Superviseur en Labview» Travail (suite) : Compléter le squelette de fichier Lis3lv02dqTesteur.c fourni pour que l'application envoi au Superviseur Labview (fonctionnant sur un autre PC) les données d'accélération mesurée sur l'axe Z du MEMS3D. Toutes les 100 mesures de l'accélération sur Z, envoyer un paquet de 100 mesures séparées par des ',' soit le format suivant : char* buffer = 0,%d,%d, %d...valeur1, valeur2, valeur3... Faire que le programme se connecter à l'adresse/port indiqué par l'encadrant Repérer et utiliser l'objet assurant l'heure absolue CHeureAbsolue sur la carte PEGASE Envoyer au Superviseur, au même moment, une trame ASCII conteant l'heure absolue de la callback. Exemple : char* «il est %dh%dmn%ds%dµs, heure, min, sec, µsec...» 82
Partie 5 : Développement d'applications métier Application 1 : «Envoi TCP/IP/WiFi de données du capteur C2 d'advitam (Accéléro MEMS3D + PT100) vers un Superviseur en Labview» Conclusions collectives : Utilisation du client TCP/IP De la datation absolue! A qqs µs! Mise en oeuvre des CallBack Lien aisé avec le monde PC / Windows / Labview => Merci TCP/IP... 83
Partie 5 : Développement d'applications métier Application 2 : «Sensor GPS : envoi d'alarme SMS/GSM sur détection de déplacement GPS. Serveur TCP/WiFi». Mise en œuvre d'un automate d'état Objectif : plus que coder, appliquer une démarche : cycle en V (Cahier des Charges, Spécifications, Conception, Tests...) mettre en oeuvre le mécanisme de CallBack Appréhender la mise en réseau GSM de système PEGASE : envoi de SMS Utiliser le GPS comme capteur de déplacement Travail : réaliser le travail spécifié dans le doc fourni (TP3 du module ESEO-SEA3) Bien lire / comprendre le CDC Modéliser la solution par un automate d'état A partir du squelette de solution SensorGPS.c réaliser l'application Test final : envoi de SMS lors d'1 déplacement de la carte + log WiFi + 84
Partie 5 : Développement d'applications métier Application 3 : «Mise en œuvre des fonctions DSP de PEGASE : FFT, min/max/mean, etc.» Intervenant : MLP Objectif : avoir un aperçu des capacités orientées «traitement de signal» de la carte PEGASE / DSP BF537 Observer le Makefile : option «-lbfdsp» Travail : tester l'exemple puis modifier Example_DSP pour comprendre le fonctionnement de la lib DSP : modifier la fréquence de 50 à 75Hz de la FFT et vérifier le résultat. Jeter un œil sur LE livre décrivant la lib DSP => «C/C++ Compiler and Library Manual for Blackfin Processors» => «DSP RUN-TIME LIBRARY» (P.879) => Travail en matrice, complexe, statistiques... = DSP!!! 85
Partie 5 : Développement d'applications métier Application 4 : «Mise en oeuvre du watchdog sur PEGASE» Objectif: Se familiariser avec la mise en oeuvre d'un watchdog sur PEGASE = Sécurisation du fonctionnement opérationnel d'une appli. Travail : observer, vérifier et bien comprendre le fichier Example_Watchdog.c fourni dans la lib Pegase et observer le résultat sur la carte PEGASE Modifier le comportement de l'application pour, qu'en permanence, ce soit la boucle principale du programme qui reset le watchdog en permanence; ce reset est suspendu lors d'un appui sur BP1 et la carte reboot Vérifier dans tous les cas le bon redémarrage de la carte 86
Partie 5 : Développement d'applications métier Application 5 : «Utilisation de la librairie XML sur PEGASE» Intervenant : Laurent Lemarchand Objectif: se familiariser avec l'utilisation de fichiers XML sur PEGASE Travail : Observer le Makefile : importance de l'inclusion de 3 nouvelles librairies. Nota bene : les librairies XML sont inclues de base dans PEGASE V1.E Observer, comprendre le fichier XXX.c fourni Modifier le contenu du fichier XML et les faire apparaître dans le fichier principal : => Ajout de nouvelles BALISES XML root:/> Example_XML /configuration.xml LIEU... 87
Partie 5 : Développement d'applications métier Application 6 : «utiliser la carte fille 8 voies d'entrées analogiques : GBF en entrée + FFT + envoi TCP vers un serveur Labview» Intervenants : Vincent + Mathieu + William G. Objectif : utiliser et se familiariser avec la carte fille 8 voies de PEGASE. Mettre en œuvre une chaîne complète de fonctions se rapprochant d'applications de monitoring de terrain Voir le lien SIMPLE entre PEGASE et des système de type Labview Travail : à l'aide des exemples fournis et de librairie PEGASE, développer une application qui configure et démarre une acquisition à 1 khz sur 2 voies d'entrées d'analogiques de la carte fille 8 voies. Sur chaque buffer d'échantillons acquis faire la FFT, envoyer cette FFT au superviseur Labview en TCP/IP/WiFi 88
Partie 5 : Développement d'applications métier Application 7 : «Customiser le serveur web intégré sur PEGASE» Intervenant : William Martin Objectif : montrer comment et où il est possible de customiser le serveur web (boa) intégré sur PEGASE William fait une présentation au groupe de la démarche à suivre: Lieu dans la distrib : «.../pegase/uclinux-dist/user/pegase-web/» lien CGI / language C Présentation du travail réalisé pour SWN VLC : exemple du PEGASE-RTU et sa généralisation 89
Partie 5 : Développement d'applications métier Application 8 : «PEGASE et l'énergie : autonomie, CSolarManager, etc.» Objectif : comprendre comment PEGASE peut, le cas échéant, gérer une source d'énergie et un stockage Vincent fait une présentation : (cf le cours sur SmartGrid) sur les sources et les méthodes associées Sources d'énergie Méthodes d'optimisation matérielles : boost / buck-boost Logicielles : MPPT La solution retenue sur PEGASE et les travaux en cours 90
Partie 5 : Développement d'applications métier Application 9 : «Développer en C++ sur PEGASE» Intervenant : Vincent et Mathieu Objectif : comprendre que, sur la cible PEGASE, il est également possible de développe en langage C++ (et non en C objet) et donc de bénéficier de la force du C++ : encapsulation, héritage, polymorphisme, capitalisation... Vincent fait une présentation du petit exemple donné dans: pegase/uclinux-dist/user/pegase-test/cpp Ouvrir le code source et analyser 91
Partie 6 : debugage et cross debugage dynamique Cf. Cours et TP de William Martin 92
Partie 7 : Etude de VOS use-case Suggestions : Zoomer / discuter de l'appli CASC 'emblématique ' : mono et multivoies... Retenir le principe «producteur / consommateur» de data Utilisation de l'interface web qui se généralise Vers PEGASE2...... 93
Partie 7 : Etude de VOS use-case Vos USE-CASE??? 94