SlideShare une entreprise Scribd logo
EE3C Gestion des périphériques
Séance 7
Systèmes temps réel
et PRUSS
Sébastien Combéfis 28 mars 2017
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons
Attribution – Pas d’Utilisation Commerciale – Pas de Modification 4.0 International.
Objectifs
Comprendre système temps-réel et contraintes
Contraintes temps-réel souples et fortes
Ordonnanceur de tâches préemptif ou non
Sous-système PRUSS de gestion du temps-réel
Sous-système PRUs sur la BBB et coopération CPU
Process de développement d’un programme temps-réel
3
Merci !
Merci à Alexis Nootens pour son aide, 1
ma meilleure motivation !
1. Uniquement pour ce slide
4
Système temps-réel
Temps-réel et Linux embarqué
Linux est par défaut non préemptif
Un processus en cours d’exécution ne peut être interrompu
Pas de support pour entrée/sortie où le timing est critique
Par exemple pour lire les valeurs d’un senseur ultrasonique
Garantie d’une réponse endéans une deadline (ms/µs)
Peu importe la charge actuelle sur le système
6
Temps-réel hard et soft
Hard ou soft selon conséquences si deadline manquée
Catastrophique pour l’objet embarquant le système ?
Temps-réel souple si réduction qualité du service
Transmission vidéo, communication téléphonique...
Temps-réel fort si défaillance/incapacité du système
Direction assistée, robots auto-équilibrant...
Kernel Linux principal supporte le temps-réel souple
7
Expérience BBB (1)
Script pour alterner l’état d’une LED le plus vite possible
En manipulant directement sysfs via Bash
Branchement sur P9_23 qui est GPIO1_17 (1 × 32 + 17 = 49)
#!/ bin/bash
echo 49 > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio49/direction
COUNTER =0
while [ $COUNTER -lt 100000 ]; do
echo 0 > /sys/class/gpio/gpio49/value
echo 1 > /sys/class/gpio/gpio49/value
let COUNTER=COUNTER +1
done
echo 49 > /sys/class/gpio/unexport
8
Expérience BBB (2)
Obtention d’une période ∼0.45 ms donc fréquence ∼2.2 kHz
Fréquence pas très haute pour un contrôleur embarqué
De plus, consommation CPU très grande de l’ordre de ∼98.1%
Passer à C++ améliore fréquence, mais pas consommation
Deux pistes d’amélioration possibles sur la BBB
Périodique commuté haute fréquence avec PWM (∼1 MHz)
Output non périodique haute fréquence avec PRU
9
Ordonnancement de processus
Processus ordonnancés par le système d’exploitation
Décision de qui à droit au CPU pour s’exécuter
Linux pas préemptif, pas d’interruption d’un processus exécuté
Le processus consomme d’office tout son temps kernel
Ordonnancement préemptif propose des priorités sur les tâches
Interruption des tâches de plus basse priorité
Période de préemption de l’ordre de quelques microsecondes
10
OS temps-réel (1)
Application temps-réel impose pas rythme à l’environnement
Pouvoir processer évènements dans des délais acceptables
Environnement provoque des interruptions sur le système
Application doit pouvoir suivre le rythme de l’environnement
Machine industrielle pour percer des doughnuts
Senseur identifiant qu’un doughnut approche
Vitesse tapis roulant vitesse, distance senseur et perforateur
Timing précis pour déclencher le hole puncher
11
OS temps-réel (2)
Plusieurs caractéristiques distinguant RTOS de GPOS
Embarqué sans interface utilisateur (complexe)
Complètement déterministe
Contrôle sur l’OS, tâches prioritaires en premier
Un RTOS peut violer la règle de fairness des GPOS
Tous les processus reçoivent du temps CPU, tous interruptibles
Applications spécifiques nécessitant du temps-réel
Boucle de contrôle fermée, décision marketing...
12
Domaine d’application
Industrie de mesure et contrôle
Robots sur chaine de production, senseur d’overheat detection...
Industrie aéronautique
Integrated Modular Avionics (IMA) réseau distribué de systèmes
à bord, simulations en mode HIL...
Industrie des services financiers
Connexion de systèmes trading avec stock exchange
Tout le business multimedia
Processing d’information audio/vidéo pour perception humaine
13
Linux préemptif
Possibilité d’obtenir du support temps-réel au niveau software
En modifiant le kernel Linux ou en ajoutant d’autres éléments
Trois options à des niveaux différents
Patcher le kernel Linux pour supporter la préemption
Recompiler le noyau avec CONFIG_PREEMPT_RT_FULL=y
Xenomai propose un co-kernel temps-réel appelé Cobalt
Plus prioritaire que kernel Linux, réagit à interruption hardware
Ne pas utiliser le Linux principal, mais un autre OS spécialisé
Le no-OS StarterWare ou le QNX Neutrino RTOS
14
Support hardware
Outsourcing opérations temps-réel à microcontrôleur low-cost
Arduino, Atmel AVR, TI Stellaris connecté en UART
Utilisation cape sophistiquée pour opérations temps-réel
Valent F(x) LOGi-Bone FPGA development board
Programmé en Verilog ou VHDL pour calcul parallèle
Unités temps-réel programmables (PRUs)
Le processeur AM335x de la BBB possède deux PRUs
15
PRU
Programmable Real-time Unit (PRU)
Programmable Real-Time Unit and
Industrial Communication Subsystem (PRU-ICSS)
Unités programmables spécialisées pour le temps-réel
Deux unités PRU disponibles sur le processeur AM335x
Cœur RISC sur 32 bits cadencé à 200 MHz
Mémoire locale et partage des pins, interruption et mémoire
PRU-ICSS pas un accélérateur hardware de performances
Manipuler E/S et structure memory-mapped
Interface de communication (E/S simple, bit-banging...)
17
AM355x
Diagramme blocs fonctionnel du processeur AM335x Sitara
18
PRU-ICSS
Deux cœurs RICS 32 bits indépendants (PRU0 et PRU1)
Mémoire dédiée pour programme et pour données
Enhanced GPIO (EGP) pour GPIO rapides
Contrôleur d’interruption (INTC) pour notifier avec host
19
Programmer le PRU-ICSS
Création d’un device tree overlay custom
Pour rendre les GPIOs disponibles
Écriture et compilation du code du programme hôte et PRU
Binaire pour PRU transféré par programme hôte sur PRU-ICSS
Bridge entre hôte et PRU-ICSS (interruption, mémoire...)
DTO
Code hôte (.c)
Code PRU (.p)
Compilateur C
Assembleur pasm
Prog. hôte C
Prog. PRU (.bin)
Programme PRU
Hôte Linux PRU-ICSS
20
PRU-ICSS Enhanced GPIOs
PRU-ICSS a des pins GPIOs améliorées pr1_pruX_pru_r3Y_Z
X donne numéro du PRU (0 ou 1)
Y détermine input ou output (1 ou 0)
Z donne numéro de pin (de 1 à 16)
Configuration obligatoire du pin mux en mode 5 ou 6
Toutes les pins ne sont pas exportées, ni en entrée et sortie
21
Configuration du DT (1)
Configuration de deux GPIOs classiques et deux enhanced
P9_11 reliée àgpio0[30] en output
P9_13 reliée à gpio0[31] en input
P9_27 reliée à pr1_pru0_pru_r30_5 en output
P9_28 reliée à pr1_pru0_pru_r31_3 en input
Nécessité de désactiver HDMI en conflit avec enhanced GPIOs
Présence à vérifier dans le fichier des slots
22
Configuration du DT (2)
1 /dts -v1/;
2 /plugin /;
3 / {
4 compatible = "ti ,beaglebone", "ti ,beaglebone -black";
5 part -number = "EBB -PRU -Example";
6 version = "00A0";
7
8 /* This overlay uses the following resources */
9 exclusive -use = "P9.11", "P9.13", "P9.27", "P9 .28", "pru0";
10
11 fragment@0 {
12 target = <&am33xx_pinmux >;
13 __overlay__ {
14 gpio_pins: pinmux_gpio_pins { // The GPIO pins
15 pinctrl -single ,pins = <
16 0x070 0x07 // P9_11 MODE7 | OUTPUT | GPIO pull -down
17 0x074 0x27 // P9_13 MODE7 | INPUT | GPIO pull -down
18 >;
19 };
20 pru_pru_pins : pinmux_pru_pru_pins { // The PRU pin modes
21 pinctrl -single ,pins = <
22 0x1a4 0x05 // P9_27 pr1_pru0_pru_r30_5 , MODE5 | OUTPUT | PRU
23 0x19c 0x26 // P9_28 pr1_pru0_pru_r31_3 , MODE6 | INPUT | PRU
24 >;
25 };
26 };
27 };
23
Configuration du DT (3)
1 fragment@1 { // Enable the PRUSS
2 target = <&pruss >;
3 __overlay__ {
4 status = "okay";
5 pinctrl -names = "default";
6 pinctrl -0 = <&pru_pru_pins >;
7 };
8 };
9
10 fragment@2 { // Enable the GPIOs
11 target = <&ocp >;
12 __overlay__ {
13 gpio_helper {
14 compatible = "gpio -of -helper";
15 status = "okay";
16 pinctrl -names = "default";
17 pinctrl -0 = <&gpio_pins >;
18 };
19 };
20 };
21 };
24
Package PRU-ICSS
Debian comporte le package PRU-ICSS avec une série d’outils
Créer binaire avec PRU Assembler
Charger binaire avec PRU Linux Application Loader API
$ ls /usr/include/pru*
/usr/include/ pruss_intc_mapping .h /usr/include/prussdrv.h
$ ls /usr/lib/libpru*
/usr/lib/libprussdrv.a /usr/lib/ libprussdrv .so /usr/lib/
libprussdrvd .a /usr/lib/ libprussdrvd .so
$ pasm
PRU Assembler Version 0.86
Copyright (C) 2005 -2013 by Texas Instruments Inc.
25
Flash the LED (1)
Flasher une LED à 10 Hz branchée sur une enhanced GPIO
Jusqu’à pression sur un bouton connecté sur une enhanced GPIO
Définition d’une série de constantes de configuration
1 // PRUSS program to flash a LED on P9_27 ( pru0_pru_r30_5 ) until a button
2 // that is connected to P9_28 ( pru0_pru_r31_3 is pressed). This program
3 // was writen by Derek Molloy for the book Exploring BeagleBone
4
5 .origin 0 // start of program in PRU memory
6 .entrypoint START // program entry point (for a debugger)
7
8 #define INS_PER_US 200 // 5ns per instruction
9 #define INS_PER_DELAY_LOOP 2 // two instructions per delay loop
10 // set up a 50ms delay
11 #define DELAY 50 * 1000 * (INS_PER_US / INS_PER_DELAY_LOOP )
12
13 #define PRU0_R31_VEC_VALID 32 // allows notification of program completion
14 #define PRU_EVTOUT_0 3 // the event number that is sent back
26
Flash the LED (2)
Boucles pour faire clignoter la LED
Test si le bouton est enfoncé en fin de code, et arrêter ou boucler
1 START:
2 SET r30.t5 // turn on the output pin (LED on)
3 MOV r0 , DELAY // store the length of the delay in REG0
4 DELAYON:
5 SUB r0 , r0 , 1 // Decrement REG0 by 1
6 QBNE DELAYON , r0 , 0 // Loop to DELAYON , unless REG0 =0
7 LEDOFF:
8 CLR r30.t5 // clear the output bin (LED off)
9 MOV r0 , DELAY // Reset REG0 to the length of the delay
10 DELAYOFF:
11 SUB r0 , r0 , 1 // decrement REG0 by 1
12 QBNE DELAYOFF , r0 , 0 // Loop to DELAYOFF , unless REG0 =0
13
14 QBBC START , r31.t3 // is the button pressed? If not , loop
15
16 END: // notify the calling app that finished
17 MOV R31.b0 , PRU0_R31_VEC_VALID | PRU_EVTOUT_0
18 HALT // halt the pru program
27
Flash the LED (3)
SET/CLR r30.t5 modifie bit 5 du registre 30 pour gérer LED
Bit contrôlant la pin output pr1_pru0_pru_r30_5
Registre 0 utilisé pour calculer le délai d’allumage/extinction
Fixé au départ à la valeur de la constante DELAY
Décrémenté de 1 avec SUB à chaque itération
QBBC START, r31.t3 lit bit 3 du registre 31 pour bouton
Bit contrôlant la pin input pr1_pru0_pru_r31_3
28
Compilation
Compilation du programme avec l’assembleur pasm
Option -b pour fichier binaire en little-endian
Génération d’un fichier binaire à placer dans mémoire du PRU
Fichier de 52 bytes (soit 13 mots)
Sans soucis dans la mémoire de 8KB du PRU
29
Programme principal (1)
Chargement du fichier binaire dans le PRU pour exécution
Ensuite attente du résultat de l’exécution
1 /** Program to load a PRU program that flashes an LED until a button is
2 * pressed. By Derek Molloy , for the book Exploring BeagleBone
3 * based on the example code at:
4 * http :// processors.wiki.ti.com/index.php/
PRU_Linux_Application_Loader_API_Guide
5 */
6
7 # include <stdio.h>
8 # include <stdlib.h>
9 # include <prussdrv.h>
10 # include <pruss_intc_mapping .h>
11
12 # define PRU_NUM 0 // using PRU0 for these examples
13
14 int main (void)
15 {
16 if(getuid () !=0){
17 printf("You must run this program as root. Exiting .n");
18 exit( EXIT_FAILURE );
19 }
30
Programme principal (2)
1 // Initialize structure used by prussdrv_pruintc_intc
2 // PRUSS_INTC_INITDATA is found in pruss_intc_mapping .h
3 tpruss_intc_initdata pruss_intc_initdata = PRUSS_INTC_INITDATA ;
4
5 // Allocate and initialize memory
6 prussdrv_init ();
7 prussdrv_open ( PRU_EVTOUT_0 );
8
9 // Map PRU’s interrupts
10 prussdrv_pruintc_init (& pruss_intc_initdata );
11
12 // Load and execute the PRU program on the PRU
13 prussdrv_exec_program (PRU_NUM , "./ ledButton.bin");
14
15 // Wait for event completion from PRU , returns the PRU_EVTOUT_0 number
16 int n = prussdrv_pru_wait_event ( PRU_EVTOUT_0 );
17 printf("EBB PRU program completed , event number %d.n", n);
18
19 // Disable PRU and close memory mappings
20 prussdrv_pru_disable (PRU_NUM);
21 prussdrv_exit ();
22 return EXIT_SUCCESS ;
23 }
31
Qualité temps-réel
Signal produit en sortie ne contient plus de jitter
Contrairement à la version brute avec pin GPIO simple en Bash
Réduction de la consommation du CPU car délégation au PRU
Seulement 0.2 % du CPU consommé
32
Caractéristiques du PRU
Mémoire composée de registres et mémoire GP locale
32 registres 32 bits : 0 pour indexer, 1–29 GPR et 30–31 SPR
Mémoire GP locale du PRU mappée sur l’hôte Linux
Data RAM0 et RAM1, et une mémoire partagée
Jeu d’instructions de type RISC avec ∼45 instructions
Arithmétique, logique, reg load/store, program control flow
33
Performance
Possibilité de faire flasher la LED à une fréquence ∼10 MHz
Avec le code présenté précédemment
Déclenchement de la LED environ 30 ns après pression bouton
Lumière parcourt 9 m dans le vide (3.108
m/s)
Son parcourt 1/100 mm dans l’air, niveau de la mer (340 m/s)
Possibilité de créer des signaux à très hautes fréquences
Output horloge dédiée en UART à 192 MHz
34
Livres de référence
ISBN
978-1-118-93512-5
ISBN
978-0-596-52968-0
35
Crédits
Photos des livres depuis Amazon
https://www.flickr.com/photos/energeticspell/4095522584
https://www.flickr.com/photos/andrewsan/8648625518
36

Contenu connexe

Tendances

Base des systèmes à microprocesseur
Base des systèmes à microprocesseurBase des systèmes à microprocesseur
Base des systèmes à microprocesseur
Peronnin Eric
 
Telecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQL
webreaker
 
Fiche TD sur les systèmes informatiques
Fiche TD sur les systèmes informatiquesFiche TD sur les systèmes informatiques
Fiche TD sur les systèmes informatiques
ATPENSC-Group
 
Exposé Le Microprocesseur
Exposé   Le MicroprocesseurExposé   Le Microprocesseur
Exposé Le MicroprocesseurTheCrazyMan
 
Formation arduino 2018
Formation arduino 2018Formation arduino 2018
Formation arduino 2018
Hichem Hamdi
 
Presentation pfe RoBeX
Presentation pfe RoBeXPresentation pfe RoBeX
Presentation pfe RoBeX
jalel Derbali
 
introduction automatisme industriel
introduction automatisme industrielintroduction automatisme industriel
introduction automatisme industriel
Adnane Ahmidani
 
ROBOT à base d'Android - Présentation PFE
ROBOT à base d'Android - Présentation PFEROBOT à base d'Android - Présentation PFE
ROBOT à base d'Android - Présentation PFE
Houssem Eddine LASSOUED
 
Manuel des TP : Atelier systèmes 2
Manuel des TP : Atelier systèmes 2Manuel des TP : Atelier systèmes 2
Manuel des TP : Atelier systèmes 2
Faycel Chaoua
 
presentation_PFE.pptx
presentation_PFE.pptxpresentation_PFE.pptx
presentation_PFE.pptx
FazaFoudhaili
 
Support du cours : Programmation Web 2
Support du cours : Programmation Web 2Support du cours : Programmation Web 2
Support du cours : Programmation Web 2
Faycel Chaoua
 
Systeme embarque
Systeme embarqueSysteme embarque
Systeme embarque
Mohammed TIGHREMT
 
Présentation PFE
Présentation PFEPrésentation PFE
Présentation PFE
Ilef Ben Slima
 
Rapport de projet de fin d'année
Rapport de projet de fin d'année Rapport de projet de fin d'année
Rapport de projet de fin d'année
kaies Labiedh
 
Systeme embarque td1
Systeme embarque td1Systeme embarque td1
Systeme embarque td1
SinGuy
 
Système d’exploitation: Principe
Système d’exploitation: PrincipeSystème d’exploitation: Principe
Système d’exploitation: Principe
Souhaib El
 
Supervision industrielle www.automate pro.blogspot.com
Supervision industrielle www.automate pro.blogspot.comSupervision industrielle www.automate pro.blogspot.com
Supervision industrielle www.automate pro.blogspot.com
Adnane Ahmidani
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1
vangogue
 

Tendances (20)

Base des systèmes à microprocesseur
Base des systèmes à microprocesseurBase des systèmes à microprocesseur
Base des systèmes à microprocesseur
 
Telecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQL
 
Fiche TD sur les systèmes informatiques
Fiche TD sur les systèmes informatiquesFiche TD sur les systèmes informatiques
Fiche TD sur les systèmes informatiques
 
Exposé Le Microprocesseur
Exposé   Le MicroprocesseurExposé   Le Microprocesseur
Exposé Le Microprocesseur
 
Formation arduino 2018
Formation arduino 2018Formation arduino 2018
Formation arduino 2018
 
Presentation pfe RoBeX
Presentation pfe RoBeXPresentation pfe RoBeX
Presentation pfe RoBeX
 
introduction automatisme industriel
introduction automatisme industrielintroduction automatisme industriel
introduction automatisme industriel
 
ROBOT à base d'Android - Présentation PFE
ROBOT à base d'Android - Présentation PFEROBOT à base d'Android - Présentation PFE
ROBOT à base d'Android - Présentation PFE
 
Manuel des TP : Atelier systèmes 2
Manuel des TP : Atelier systèmes 2Manuel des TP : Atelier systèmes 2
Manuel des TP : Atelier systèmes 2
 
Cours pics16 f877
Cours pics16 f877Cours pics16 f877
Cours pics16 f877
 
presentation_PFE.pptx
presentation_PFE.pptxpresentation_PFE.pptx
presentation_PFE.pptx
 
Support du cours : Programmation Web 2
Support du cours : Programmation Web 2Support du cours : Programmation Web 2
Support du cours : Programmation Web 2
 
Systeme embarque
Systeme embarqueSysteme embarque
Systeme embarque
 
Présentation PFE
Présentation PFEPrésentation PFE
Présentation PFE
 
Rapport de projet de fin d'année
Rapport de projet de fin d'année Rapport de projet de fin d'année
Rapport de projet de fin d'année
 
Systèmes Automatisés
Systèmes AutomatisésSystèmes Automatisés
Systèmes Automatisés
 
Systeme embarque td1
Systeme embarque td1Systeme embarque td1
Systeme embarque td1
 
Système d’exploitation: Principe
Système d’exploitation: PrincipeSystème d’exploitation: Principe
Système d’exploitation: Principe
 
Supervision industrielle www.automate pro.blogspot.com
Supervision industrielle www.automate pro.blogspot.comSupervision industrielle www.automate pro.blogspot.com
Supervision industrielle www.automate pro.blogspot.com
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1
 

En vedette

Tests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnitTests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnit
ECAM Brussels Engineering School
 
Développement informatique : Programmation graphique
Développement informatique : Programmation graphiqueDéveloppement informatique : Programmation graphique
Développement informatique : Programmation graphique
ECAM Brussels Engineering School
 
De la Terre aux Étoiles : Mesure des distances Terre-Étoile
De la Terre aux Étoiles : Mesure des distances Terre-ÉtoileDe la Terre aux Étoiles : Mesure des distances Terre-Étoile
De la Terre aux Étoiles : Mesure des distances Terre-Étoile
ECAM Brussels Engineering School
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
ECAM Brussels Engineering School
 
UKO-JAVA1001-slides
UKO-JAVA1001-slidesUKO-JAVA1001-slides
Laboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projetLaboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projet
ECAM Brussels Engineering School
 
Développement informatique : Programmation réseau
Développement informatique : Programmation réseauDéveloppement informatique : Programmation réseau
Développement informatique : Programmation réseau
ECAM Brussels Engineering School
 
Réseaux des neurones
Réseaux des neuronesRéseaux des neurones
Réseaux des neuronesMed Zaibi
 
Python avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementiellePython avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementielle
ECAM Brussels Engineering School
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...
ECAM Brussels Engineering School
 
Python avancé : Tuple et objet
Python avancé : Tuple et objetPython avancé : Tuple et objet
Python avancé : Tuple et objet
ECAM Brussels Engineering School
 
Johnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScriptJohnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScript
ECAM Brussels Engineering School
 
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarquéProgrammation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
ECAM Brussels Engineering School
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
ECAM Brussels Engineering School
 
Héritage et redéfinition de méthode
Héritage et redéfinition de méthodeHéritage et redéfinition de méthode
Héritage et redéfinition de méthode
ECAM Brussels Engineering School
 
Introduction à la formation Digitalent
Introduction à la formation DigitalentIntroduction à la formation Digitalent
Introduction à la formation Digitalent
ECAM Brussels Engineering School
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbre
ECAM Brussels Engineering School
 
Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
ECAM Brussels Engineering School
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
ECAM Brussels Engineering School
 
Type abstrait de données
Type abstrait de donnéesType abstrait de données
Type abstrait de données
ECAM Brussels Engineering School
 

En vedette (20)

Tests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnitTests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnit
 
Développement informatique : Programmation graphique
Développement informatique : Programmation graphiqueDéveloppement informatique : Programmation graphique
Développement informatique : Programmation graphique
 
De la Terre aux Étoiles : Mesure des distances Terre-Étoile
De la Terre aux Étoiles : Mesure des distances Terre-ÉtoileDe la Terre aux Étoiles : Mesure des distances Terre-Étoile
De la Terre aux Étoiles : Mesure des distances Terre-Étoile
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
 
UKO-JAVA1001-slides
UKO-JAVA1001-slidesUKO-JAVA1001-slides
UKO-JAVA1001-slides
 
Laboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projetLaboratoire de transmission numérique : Présentation du projet
Laboratoire de transmission numérique : Présentation du projet
 
Développement informatique : Programmation réseau
Développement informatique : Programmation réseauDéveloppement informatique : Programmation réseau
Développement informatique : Programmation réseau
 
Réseaux des neurones
Réseaux des neuronesRéseaux des neurones
Réseaux des neurones
 
Python avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementiellePython avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementielle
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...
 
Python avancé : Tuple et objet
Python avancé : Tuple et objetPython avancé : Tuple et objet
Python avancé : Tuple et objet
 
Johnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScriptJohnny-Five : Robotique et IoT en JavaScript
Johnny-Five : Robotique et IoT en JavaScript
 
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarquéProgrammation de systèmes embarqués : BeagleBone Black et Linux embarqué
Programmation de systèmes embarqués : BeagleBone Black et Linux embarqué
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
 
Héritage et redéfinition de méthode
Héritage et redéfinition de méthodeHéritage et redéfinition de méthode
Héritage et redéfinition de méthode
 
Introduction à la formation Digitalent
Introduction à la formation DigitalentIntroduction à la formation Digitalent
Introduction à la formation Digitalent
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbre
 
Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
 
Type abstrait de données
Type abstrait de donnéesType abstrait de données
Type abstrait de données
 

Similaire à Programmation de systèmes embarqués : Systèmes temps réel et PRUSS

Astuces cisco
Astuces ciscoAstuces cisco
Astuces cisco
CONNECT Tunisia
 
RUDDER - Continuous Configuration (configuration management + continuous audi...
RUDDER - Continuous Configuration (configuration management + continuous audi...RUDDER - Continuous Configuration (configuration management + continuous audi...
RUDDER - Continuous Configuration (configuration management + continuous audi...
RUDDER
 
FDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
FDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
FDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
mohamedsaidi212001
 
Datalogger finale
Datalogger finaleDatalogger finale
Datalogger finale
babaoui mohamed
 
prog_reg.pptx
prog_reg.pptxprog_reg.pptx
prog_reg.pptx
MbarkiIsraa
 
Microcontroller/microcontroleur/pic.pptx
Microcontroller/microcontroleur/pic.pptxMicrocontroller/microcontroleur/pic.pptx
Microcontroller/microcontroleur/pic.pptx
SABIR Hamza
 
Cours de PIC Généralités.pdf
Cours de PIC Généralités.pdfCours de PIC Généralités.pdf
Cours de PIC Généralités.pdf
AliRami3
 
Solutions temps réel sous linux
Solutions temps réel sous linuxSolutions temps réel sous linux
Solutions temps réel sous linux
embedded-linux-bdx
 
TD_complet_reseau__CISCO__Packet Tracer.pdf
TD_complet_reseau__CISCO__Packet Tracer.pdfTD_complet_reseau__CISCO__Packet Tracer.pdf
TD_complet_reseau__CISCO__Packet Tracer.pdf
Ines Ben Hassine
 
Linux et le temps réel - Meetup du 15 octobre 2015
Linux et le temps réel - Meetup du 15 octobre 2015Linux et le temps réel - Meetup du 15 octobre 2015
Linux et le temps réel - Meetup du 15 octobre 2015
Christian Charreyre
 
Projet boot loader avec le pic16f887_ppt
Projet boot loader avec le pic16f887_pptProjet boot loader avec le pic16f887_ppt
Projet boot loader avec le pic16f887_ppt
Mouhcine Nid Belkacem
 
Cours Systemes embarques.pptx
Cours Systemes embarques.pptxCours Systemes embarques.pptx
Cours Systemes embarques.pptx
SihemNasri3
 
Tp2: Installation d'une couche d’abstraction entre un robot physique et ros
Tp2: Installation d'une couche d’abstraction entre un robot physique et rosTp2: Installation d'une couche d’abstraction entre un robot physique et ros
Tp2: Installation d'une couche d’abstraction entre un robot physique et ros
Said Benaissa
 
Sizing PoC LSF & PowerAI for Engineers schools workloads
Sizing PoC LSF & PowerAI for Engineers schools workloadsSizing PoC LSF & PowerAI for Engineers schools workloads
Sizing PoC LSF & PowerAI for Engineers schools workloads
PhilippeBrogi
 
Ordonnancement exercices
Ordonnancement exercicesOrdonnancement exercices
Ordonnancement exercicesSelman Dridi
 
Chap 1 Intro Microcontroleurs et Interruptions.pdf
Chap 1 Intro Microcontroleurs et Interruptions.pdfChap 1 Intro Microcontroleurs et Interruptions.pdf
Chap 1 Intro Microcontroleurs et Interruptions.pdf
DAPcreat
 
pic16f84-200306072553.pdf
pic16f84-200306072553.pdfpic16f84-200306072553.pdf
pic16f84-200306072553.pdf
Abdo Brahmi
 
we config - procédure configuration rapide réseau Ethernet
we config - procédure configuration rapide réseau Ethernetwe config - procédure configuration rapide réseau Ethernet
we config - procédure configuration rapide réseau Ethernet
Olivier Bughin
 
Support systemes multitaches-tempsreel
Support systemes multitaches-tempsreelSupport systemes multitaches-tempsreel
Support systemes multitaches-tempsreel
youssef essakhi
 

Similaire à Programmation de systèmes embarqués : Systèmes temps réel et PRUSS (20)

Astuces cisco
Astuces ciscoAstuces cisco
Astuces cisco
 
RUDDER - Continuous Configuration (configuration management + continuous audi...
RUDDER - Continuous Configuration (configuration management + continuous audi...RUDDER - Continuous Configuration (configuration management + continuous audi...
RUDDER - Continuous Configuration (configuration management + continuous audi...
 
FDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
FDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
FDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
 
Datalogger finale
Datalogger finaleDatalogger finale
Datalogger finale
 
prog_reg.pptx
prog_reg.pptxprog_reg.pptx
prog_reg.pptx
 
Microcontroller/microcontroleur/pic.pptx
Microcontroller/microcontroleur/pic.pptxMicrocontroller/microcontroleur/pic.pptx
Microcontroller/microcontroleur/pic.pptx
 
Cours de PIC Généralités.pdf
Cours de PIC Généralités.pdfCours de PIC Généralités.pdf
Cours de PIC Généralités.pdf
 
Solutions temps réel sous linux
Solutions temps réel sous linuxSolutions temps réel sous linux
Solutions temps réel sous linux
 
TD_complet_reseau__CISCO__Packet Tracer.pdf
TD_complet_reseau__CISCO__Packet Tracer.pdfTD_complet_reseau__CISCO__Packet Tracer.pdf
TD_complet_reseau__CISCO__Packet Tracer.pdf
 
Linux et le temps réel - Meetup du 15 octobre 2015
Linux et le temps réel - Meetup du 15 octobre 2015Linux et le temps réel - Meetup du 15 octobre 2015
Linux et le temps réel - Meetup du 15 octobre 2015
 
Projet boot loader avec le pic16f887_ppt
Projet boot loader avec le pic16f887_pptProjet boot loader avec le pic16f887_ppt
Projet boot loader avec le pic16f887_ppt
 
Cours Systemes embarques.pptx
Cours Systemes embarques.pptxCours Systemes embarques.pptx
Cours Systemes embarques.pptx
 
Tp2: Installation d'une couche d’abstraction entre un robot physique et ros
Tp2: Installation d'une couche d’abstraction entre un robot physique et rosTp2: Installation d'une couche d’abstraction entre un robot physique et ros
Tp2: Installation d'une couche d’abstraction entre un robot physique et ros
 
Sizing PoC LSF & PowerAI for Engineers schools workloads
Sizing PoC LSF & PowerAI for Engineers schools workloadsSizing PoC LSF & PowerAI for Engineers schools workloads
Sizing PoC LSF & PowerAI for Engineers schools workloads
 
Ordonnancement exercices
Ordonnancement exercicesOrdonnancement exercices
Ordonnancement exercices
 
Prog commune
Prog communeProg commune
Prog commune
 
Chap 1 Intro Microcontroleurs et Interruptions.pdf
Chap 1 Intro Microcontroleurs et Interruptions.pdfChap 1 Intro Microcontroleurs et Interruptions.pdf
Chap 1 Intro Microcontroleurs et Interruptions.pdf
 
pic16f84-200306072553.pdf
pic16f84-200306072553.pdfpic16f84-200306072553.pdf
pic16f84-200306072553.pdf
 
we config - procédure configuration rapide réseau Ethernet
we config - procédure configuration rapide réseau Ethernetwe config - procédure configuration rapide réseau Ethernet
we config - procédure configuration rapide réseau Ethernet
 
Support systemes multitaches-tempsreel
Support systemes multitaches-tempsreelSupport systemes multitaches-tempsreel
Support systemes multitaches-tempsreel
 

Plus de ECAM Brussels Engineering School

Introduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnelIntroduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnel
ECAM Brussels Engineering School
 
Outils de gestion de projets
Outils de gestion de projetsOutils de gestion de projets
Outils de gestion de projets
ECAM Brussels Engineering School
 
Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...
ECAM Brussels Engineering School
 
Intelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielleIntelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielle
ECAM Brussels Engineering School
 
Développement informatique : Programmation concurrente
Développement informatique : Programmation concurrenteDéveloppement informatique : Programmation concurrente
Développement informatique : Programmation concurrente
ECAM Brussels Engineering School
 
Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulières
ECAM Brussels Engineering School
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...
ECAM Brussels Engineering School
 
Python avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codagePython avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codage
ECAM Brussels Engineering School
 
Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?
ECAM Brussels Engineering School
 
Arbre et algorithme de recherche
Arbre et algorithme de rechercheArbre et algorithme de recherche
Arbre et algorithme de recherche
ECAM Brussels Engineering School
 
HTML, CSS et Javascript
HTML, CSS et JavascriptHTML, CSS et Javascript
HTML, CSS et Javascript
ECAM Brussels Engineering School
 
Modélisation avec UML
Modélisation avec UMLModélisation avec UML
Modélisation avec UML
ECAM Brussels Engineering School
 
Python avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiersPython avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiers
ECAM Brussels Engineering School
 
Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exception
ECAM Brussels Engineering School
 

Plus de ECAM Brussels Engineering School (14)

Introduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnelIntroduction à LaTeX : le système de composition professionnel
Introduction à LaTeX : le système de composition professionnel
 
Outils de gestion de projets
Outils de gestion de projetsOutils de gestion de projets
Outils de gestion de projets
 
Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...Développement informatique : Algorithmique II : Techniques de recherche en in...
Développement informatique : Algorithmique II : Techniques de recherche en in...
 
Intelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielleIntelligence Artificielle : Introduction à l'intelligence artificielle
Intelligence Artificielle : Introduction à l'intelligence artificielle
 
Développement informatique : Programmation concurrente
Développement informatique : Programmation concurrenteDéveloppement informatique : Programmation concurrente
Développement informatique : Programmation concurrente
 
Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulières
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...
 
Python avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codagePython avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codage
 
Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?Comment Internet fonctionne-t-il ?
Comment Internet fonctionne-t-il ?
 
Arbre et algorithme de recherche
Arbre et algorithme de rechercheArbre et algorithme de recherche
Arbre et algorithme de recherche
 
HTML, CSS et Javascript
HTML, CSS et JavascriptHTML, CSS et Javascript
HTML, CSS et Javascript
 
Modélisation avec UML
Modélisation avec UMLModélisation avec UML
Modélisation avec UML
 
Python avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiersPython avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiers
 
Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exception
 

Programmation de systèmes embarqués : Systèmes temps réel et PRUSS

  • 1. EE3C Gestion des périphériques Séance 7 Systèmes temps réel et PRUSS Sébastien Combéfis 28 mars 2017
  • 2. Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution – Pas d’Utilisation Commerciale – Pas de Modification 4.0 International.
  • 3. Objectifs Comprendre système temps-réel et contraintes Contraintes temps-réel souples et fortes Ordonnanceur de tâches préemptif ou non Sous-système PRUSS de gestion du temps-réel Sous-système PRUs sur la BBB et coopération CPU Process de développement d’un programme temps-réel 3
  • 4. Merci ! Merci à Alexis Nootens pour son aide, 1 ma meilleure motivation ! 1. Uniquement pour ce slide 4
  • 6. Temps-réel et Linux embarqué Linux est par défaut non préemptif Un processus en cours d’exécution ne peut être interrompu Pas de support pour entrée/sortie où le timing est critique Par exemple pour lire les valeurs d’un senseur ultrasonique Garantie d’une réponse endéans une deadline (ms/µs) Peu importe la charge actuelle sur le système 6
  • 7. Temps-réel hard et soft Hard ou soft selon conséquences si deadline manquée Catastrophique pour l’objet embarquant le système ? Temps-réel souple si réduction qualité du service Transmission vidéo, communication téléphonique... Temps-réel fort si défaillance/incapacité du système Direction assistée, robots auto-équilibrant... Kernel Linux principal supporte le temps-réel souple 7
  • 8. Expérience BBB (1) Script pour alterner l’état d’une LED le plus vite possible En manipulant directement sysfs via Bash Branchement sur P9_23 qui est GPIO1_17 (1 × 32 + 17 = 49) #!/ bin/bash echo 49 > /sys/class/gpio/export echo "out" > /sys/class/gpio/gpio49/direction COUNTER =0 while [ $COUNTER -lt 100000 ]; do echo 0 > /sys/class/gpio/gpio49/value echo 1 > /sys/class/gpio/gpio49/value let COUNTER=COUNTER +1 done echo 49 > /sys/class/gpio/unexport 8
  • 9. Expérience BBB (2) Obtention d’une période ∼0.45 ms donc fréquence ∼2.2 kHz Fréquence pas très haute pour un contrôleur embarqué De plus, consommation CPU très grande de l’ordre de ∼98.1% Passer à C++ améliore fréquence, mais pas consommation Deux pistes d’amélioration possibles sur la BBB Périodique commuté haute fréquence avec PWM (∼1 MHz) Output non périodique haute fréquence avec PRU 9
  • 10. Ordonnancement de processus Processus ordonnancés par le système d’exploitation Décision de qui à droit au CPU pour s’exécuter Linux pas préemptif, pas d’interruption d’un processus exécuté Le processus consomme d’office tout son temps kernel Ordonnancement préemptif propose des priorités sur les tâches Interruption des tâches de plus basse priorité Période de préemption de l’ordre de quelques microsecondes 10
  • 11. OS temps-réel (1) Application temps-réel impose pas rythme à l’environnement Pouvoir processer évènements dans des délais acceptables Environnement provoque des interruptions sur le système Application doit pouvoir suivre le rythme de l’environnement Machine industrielle pour percer des doughnuts Senseur identifiant qu’un doughnut approche Vitesse tapis roulant vitesse, distance senseur et perforateur Timing précis pour déclencher le hole puncher 11
  • 12. OS temps-réel (2) Plusieurs caractéristiques distinguant RTOS de GPOS Embarqué sans interface utilisateur (complexe) Complètement déterministe Contrôle sur l’OS, tâches prioritaires en premier Un RTOS peut violer la règle de fairness des GPOS Tous les processus reçoivent du temps CPU, tous interruptibles Applications spécifiques nécessitant du temps-réel Boucle de contrôle fermée, décision marketing... 12
  • 13. Domaine d’application Industrie de mesure et contrôle Robots sur chaine de production, senseur d’overheat detection... Industrie aéronautique Integrated Modular Avionics (IMA) réseau distribué de systèmes à bord, simulations en mode HIL... Industrie des services financiers Connexion de systèmes trading avec stock exchange Tout le business multimedia Processing d’information audio/vidéo pour perception humaine 13
  • 14. Linux préemptif Possibilité d’obtenir du support temps-réel au niveau software En modifiant le kernel Linux ou en ajoutant d’autres éléments Trois options à des niveaux différents Patcher le kernel Linux pour supporter la préemption Recompiler le noyau avec CONFIG_PREEMPT_RT_FULL=y Xenomai propose un co-kernel temps-réel appelé Cobalt Plus prioritaire que kernel Linux, réagit à interruption hardware Ne pas utiliser le Linux principal, mais un autre OS spécialisé Le no-OS StarterWare ou le QNX Neutrino RTOS 14
  • 15. Support hardware Outsourcing opérations temps-réel à microcontrôleur low-cost Arduino, Atmel AVR, TI Stellaris connecté en UART Utilisation cape sophistiquée pour opérations temps-réel Valent F(x) LOGi-Bone FPGA development board Programmé en Verilog ou VHDL pour calcul parallèle Unités temps-réel programmables (PRUs) Le processeur AM335x de la BBB possède deux PRUs 15
  • 16. PRU
  • 17. Programmable Real-time Unit (PRU) Programmable Real-Time Unit and Industrial Communication Subsystem (PRU-ICSS) Unités programmables spécialisées pour le temps-réel Deux unités PRU disponibles sur le processeur AM335x Cœur RISC sur 32 bits cadencé à 200 MHz Mémoire locale et partage des pins, interruption et mémoire PRU-ICSS pas un accélérateur hardware de performances Manipuler E/S et structure memory-mapped Interface de communication (E/S simple, bit-banging...) 17
  • 18. AM355x Diagramme blocs fonctionnel du processeur AM335x Sitara 18
  • 19. PRU-ICSS Deux cœurs RICS 32 bits indépendants (PRU0 et PRU1) Mémoire dédiée pour programme et pour données Enhanced GPIO (EGP) pour GPIO rapides Contrôleur d’interruption (INTC) pour notifier avec host 19
  • 20. Programmer le PRU-ICSS Création d’un device tree overlay custom Pour rendre les GPIOs disponibles Écriture et compilation du code du programme hôte et PRU Binaire pour PRU transféré par programme hôte sur PRU-ICSS Bridge entre hôte et PRU-ICSS (interruption, mémoire...) DTO Code hôte (.c) Code PRU (.p) Compilateur C Assembleur pasm Prog. hôte C Prog. PRU (.bin) Programme PRU Hôte Linux PRU-ICSS 20
  • 21. PRU-ICSS Enhanced GPIOs PRU-ICSS a des pins GPIOs améliorées pr1_pruX_pru_r3Y_Z X donne numéro du PRU (0 ou 1) Y détermine input ou output (1 ou 0) Z donne numéro de pin (de 1 à 16) Configuration obligatoire du pin mux en mode 5 ou 6 Toutes les pins ne sont pas exportées, ni en entrée et sortie 21
  • 22. Configuration du DT (1) Configuration de deux GPIOs classiques et deux enhanced P9_11 reliée àgpio0[30] en output P9_13 reliée à gpio0[31] en input P9_27 reliée à pr1_pru0_pru_r30_5 en output P9_28 reliée à pr1_pru0_pru_r31_3 en input Nécessité de désactiver HDMI en conflit avec enhanced GPIOs Présence à vérifier dans le fichier des slots 22
  • 23. Configuration du DT (2) 1 /dts -v1/; 2 /plugin /; 3 / { 4 compatible = "ti ,beaglebone", "ti ,beaglebone -black"; 5 part -number = "EBB -PRU -Example"; 6 version = "00A0"; 7 8 /* This overlay uses the following resources */ 9 exclusive -use = "P9.11", "P9.13", "P9.27", "P9 .28", "pru0"; 10 11 fragment@0 { 12 target = <&am33xx_pinmux >; 13 __overlay__ { 14 gpio_pins: pinmux_gpio_pins { // The GPIO pins 15 pinctrl -single ,pins = < 16 0x070 0x07 // P9_11 MODE7 | OUTPUT | GPIO pull -down 17 0x074 0x27 // P9_13 MODE7 | INPUT | GPIO pull -down 18 >; 19 }; 20 pru_pru_pins : pinmux_pru_pru_pins { // The PRU pin modes 21 pinctrl -single ,pins = < 22 0x1a4 0x05 // P9_27 pr1_pru0_pru_r30_5 , MODE5 | OUTPUT | PRU 23 0x19c 0x26 // P9_28 pr1_pru0_pru_r31_3 , MODE6 | INPUT | PRU 24 >; 25 }; 26 }; 27 }; 23
  • 24. Configuration du DT (3) 1 fragment@1 { // Enable the PRUSS 2 target = <&pruss >; 3 __overlay__ { 4 status = "okay"; 5 pinctrl -names = "default"; 6 pinctrl -0 = <&pru_pru_pins >; 7 }; 8 }; 9 10 fragment@2 { // Enable the GPIOs 11 target = <&ocp >; 12 __overlay__ { 13 gpio_helper { 14 compatible = "gpio -of -helper"; 15 status = "okay"; 16 pinctrl -names = "default"; 17 pinctrl -0 = <&gpio_pins >; 18 }; 19 }; 20 }; 21 }; 24
  • 25. Package PRU-ICSS Debian comporte le package PRU-ICSS avec une série d’outils Créer binaire avec PRU Assembler Charger binaire avec PRU Linux Application Loader API $ ls /usr/include/pru* /usr/include/ pruss_intc_mapping .h /usr/include/prussdrv.h $ ls /usr/lib/libpru* /usr/lib/libprussdrv.a /usr/lib/ libprussdrv .so /usr/lib/ libprussdrvd .a /usr/lib/ libprussdrvd .so $ pasm PRU Assembler Version 0.86 Copyright (C) 2005 -2013 by Texas Instruments Inc. 25
  • 26. Flash the LED (1) Flasher une LED à 10 Hz branchée sur une enhanced GPIO Jusqu’à pression sur un bouton connecté sur une enhanced GPIO Définition d’une série de constantes de configuration 1 // PRUSS program to flash a LED on P9_27 ( pru0_pru_r30_5 ) until a button 2 // that is connected to P9_28 ( pru0_pru_r31_3 is pressed). This program 3 // was writen by Derek Molloy for the book Exploring BeagleBone 4 5 .origin 0 // start of program in PRU memory 6 .entrypoint START // program entry point (for a debugger) 7 8 #define INS_PER_US 200 // 5ns per instruction 9 #define INS_PER_DELAY_LOOP 2 // two instructions per delay loop 10 // set up a 50ms delay 11 #define DELAY 50 * 1000 * (INS_PER_US / INS_PER_DELAY_LOOP ) 12 13 #define PRU0_R31_VEC_VALID 32 // allows notification of program completion 14 #define PRU_EVTOUT_0 3 // the event number that is sent back 26
  • 27. Flash the LED (2) Boucles pour faire clignoter la LED Test si le bouton est enfoncé en fin de code, et arrêter ou boucler 1 START: 2 SET r30.t5 // turn on the output pin (LED on) 3 MOV r0 , DELAY // store the length of the delay in REG0 4 DELAYON: 5 SUB r0 , r0 , 1 // Decrement REG0 by 1 6 QBNE DELAYON , r0 , 0 // Loop to DELAYON , unless REG0 =0 7 LEDOFF: 8 CLR r30.t5 // clear the output bin (LED off) 9 MOV r0 , DELAY // Reset REG0 to the length of the delay 10 DELAYOFF: 11 SUB r0 , r0 , 1 // decrement REG0 by 1 12 QBNE DELAYOFF , r0 , 0 // Loop to DELAYOFF , unless REG0 =0 13 14 QBBC START , r31.t3 // is the button pressed? If not , loop 15 16 END: // notify the calling app that finished 17 MOV R31.b0 , PRU0_R31_VEC_VALID | PRU_EVTOUT_0 18 HALT // halt the pru program 27
  • 28. Flash the LED (3) SET/CLR r30.t5 modifie bit 5 du registre 30 pour gérer LED Bit contrôlant la pin output pr1_pru0_pru_r30_5 Registre 0 utilisé pour calculer le délai d’allumage/extinction Fixé au départ à la valeur de la constante DELAY Décrémenté de 1 avec SUB à chaque itération QBBC START, r31.t3 lit bit 3 du registre 31 pour bouton Bit contrôlant la pin input pr1_pru0_pru_r31_3 28
  • 29. Compilation Compilation du programme avec l’assembleur pasm Option -b pour fichier binaire en little-endian Génération d’un fichier binaire à placer dans mémoire du PRU Fichier de 52 bytes (soit 13 mots) Sans soucis dans la mémoire de 8KB du PRU 29
  • 30. Programme principal (1) Chargement du fichier binaire dans le PRU pour exécution Ensuite attente du résultat de l’exécution 1 /** Program to load a PRU program that flashes an LED until a button is 2 * pressed. By Derek Molloy , for the book Exploring BeagleBone 3 * based on the example code at: 4 * http :// processors.wiki.ti.com/index.php/ PRU_Linux_Application_Loader_API_Guide 5 */ 6 7 # include <stdio.h> 8 # include <stdlib.h> 9 # include <prussdrv.h> 10 # include <pruss_intc_mapping .h> 11 12 # define PRU_NUM 0 // using PRU0 for these examples 13 14 int main (void) 15 { 16 if(getuid () !=0){ 17 printf("You must run this program as root. Exiting .n"); 18 exit( EXIT_FAILURE ); 19 } 30
  • 31. Programme principal (2) 1 // Initialize structure used by prussdrv_pruintc_intc 2 // PRUSS_INTC_INITDATA is found in pruss_intc_mapping .h 3 tpruss_intc_initdata pruss_intc_initdata = PRUSS_INTC_INITDATA ; 4 5 // Allocate and initialize memory 6 prussdrv_init (); 7 prussdrv_open ( PRU_EVTOUT_0 ); 8 9 // Map PRU’s interrupts 10 prussdrv_pruintc_init (& pruss_intc_initdata ); 11 12 // Load and execute the PRU program on the PRU 13 prussdrv_exec_program (PRU_NUM , "./ ledButton.bin"); 14 15 // Wait for event completion from PRU , returns the PRU_EVTOUT_0 number 16 int n = prussdrv_pru_wait_event ( PRU_EVTOUT_0 ); 17 printf("EBB PRU program completed , event number %d.n", n); 18 19 // Disable PRU and close memory mappings 20 prussdrv_pru_disable (PRU_NUM); 21 prussdrv_exit (); 22 return EXIT_SUCCESS ; 23 } 31
  • 32. Qualité temps-réel Signal produit en sortie ne contient plus de jitter Contrairement à la version brute avec pin GPIO simple en Bash Réduction de la consommation du CPU car délégation au PRU Seulement 0.2 % du CPU consommé 32
  • 33. Caractéristiques du PRU Mémoire composée de registres et mémoire GP locale 32 registres 32 bits : 0 pour indexer, 1–29 GPR et 30–31 SPR Mémoire GP locale du PRU mappée sur l’hôte Linux Data RAM0 et RAM1, et une mémoire partagée Jeu d’instructions de type RISC avec ∼45 instructions Arithmétique, logique, reg load/store, program control flow 33
  • 34. Performance Possibilité de faire flasher la LED à une fréquence ∼10 MHz Avec le code présenté précédemment Déclenchement de la LED environ 30 ns après pression bouton Lumière parcourt 9 m dans le vide (3.108 m/s) Son parcourt 1/100 mm dans l’air, niveau de la mer (340 m/s) Possibilité de créer des signaux à très hautes fréquences Output horloge dédiée en UART à 192 MHz 34
  • 36. Crédits Photos des livres depuis Amazon https://www.flickr.com/photos/energeticspell/4095522584 https://www.flickr.com/photos/andrewsan/8648625518 36