Journées académiques Microsoft 2005

Slides:



Advertisements
Présentations similaires
PC / Traitement numérique / Contrôle Environnement logiciel
Advertisements

Premier programme en C :
Module 5 : Implémentation de l'impression
Génération de plate-forme
GESTION D’IMPRISSION SOUS WINDOWS & LINUX
Connecteurs entre socle et briques applicatives Journées rencontres du CSIESR 31 janvier et 1 er février 2005 Yohan Colmant Université de Valenciennes.
Portée des variables VBA & Excel
Synchronisation des processus père - fils
Module Systèmes dexploitation Chapitre 6 Communication Interprocessus Partie III École Normale Supérieure Tétouan Département Informatique
PROGRAMMATION LOGICIEL PL7 MICRO Consignes
Types des systèmes d’exploitation
Chapitre I : Systèmes d’exploitation
Présentation de l’Architecture Windows NT
PLAN du COURS Introduction Structure des Systèmes Informatiques
Le jeu d ’instructions Introduction Un jeu d ’instruction classique
11/02/20051 Internet Intranet Le portail UNSS. 11/02/20052 Qui peut accéder à Intranet ? Les services UNSS Les coordonnateurs de district Les AS.
simulateur de réseau de machines UML connectées par WiFi mode ad-hoc
Revision.
Jc/md/lp-01/05Introduction1. jc/md/lp-01/05Introduction2 Objectifs À la suite dune suggestion de Monsieur Laurent Ellerbach (Relations Enseignement Supérieur.
Driver de port parallèle
Jc/md/lp-01/06Génération de plate-forme1 Émulateur.
Jc/md/lp-01/05gestion mémoire : corrigé1 Gestion mémoire Corrigé
Driver de port parallèle
Jc/md/lp-01/06Kernel Tracker1 Debugging Kernel Tracker.
Driver UART en polling : corrigé
Jc/md/lp-01/05Trains_presentation1 Threads et Synchronisation Application train Présentation.
Jc/md/lp-01/05Boot Loader1 BOOT LOADER. jc/md/lp-01/05Boot Loader2 Objectif du chapitre Introduire la notion de Boot Loader Donner un aperçu de lorganisation.
Jc/md/lp-01/05Driver élémentaire : présentation1 Driver élémentaire Émulateur Présentation.
Jc/md/lp-01/05Trains_corrigé1 Threads et Synchronisation Application train Corrigé
Systèmes d’exploitation
ENVIRONNEMENT WINDOWS
ARCHITECTURE GLOBALE CAPTAGE Traitement DES des données GRANDEURS
Page 1 Introduction à ATEasy 3.0 Page 2 Quest ce quATEasy 3.0? n Ensemble de développement très simple demploi n Conçu pour développer des bancs de test.
Etude des Technologies du Web services
Création, configuration et déploiement d’un OS Windows Embedded CE.
Module 1 : Préparation de l'administration d'un serveur
Décembre 2008Évaluation des acquis des élèves de primaire 1 Évaluation Application locale Application web académique Guide destiné aux formateurs académiques.
Création d’un programme :
Les instructions PHP pour l'accès à une base de données MySql
Fonction COMMUNIQUER les liaisons série
Création d'un diaporama Création d'un diaporama
Gestion des bases de données
Des outils pour le développement logiciel
FICHIERS : Définition : Algorithme général:
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Programmation concurrente
Module 2 : Préparation de l'analyse des performances du serveur
Module 4 : Maintenance des pilotes de périphériques
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 6. Gestion des erreurs et des exceptions : Fonctionnement.
Synchronisation Classique
Plan cours La notion de pointeur et d’adresse mémoire.
NORMALISATION DES LANGAGES DE PROGRAMMATION des Automates Programmables Industriels CEI
Création et présentation d’un tableau avec Word 2007
Afficheur industriel « AIW » MAT Électronique
Module 8 : Surveillance des performances de SQL Server
Créer des packages.
Interactions entre Processus
CEG3585/CEG3555 Tutorat 2 Hi ver 2013.
Introduction à Visual Studio C++ (VC++)
La programmation système
Programmation Système et Réseau
Traitement de texte +.
Guide de référence rapide sur © 2012 Microsoft Corporation. Tous droits réservés. Lync Web App Participer à une réunion Lync avec le système audio de votre.
En route vers le déploiement . . .
Simulateur de microcontrôleur Intel 80C51
1 Windows 2003 Server Stratégie des comptes. 2 Windows 2003 Server Il faut tenir compte de ces 3 paramètres.
Architecture Client/Serveur
Chapitre 6 Résolution des problèmes liés au processus d'amorçage et au système Module S41.
Chapitre 12 Surveillance des ressources et des performances Module S41.
Intervention sur un système technique Afficheur industriel « AIW »
Transcription de la présentation:

Journées académiques Microsoft 2005 Cours Windows CE CE4.2 Journées académiques Microsoft 2005

Plan de la présentation Windows CE « pour qui, pour quoi ? » Description du cours réalisé Exemple d’application et de debuggage Exemple de driver port parallèle Conclusion et questions CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Windows CE Interface classique de Windows Système d’exploitation modulaire et compact N’est pas un sous ensemble de NT ou XP Système réécrit entièrement pour optimiser la taille et la performance Répond à plus de 90% des applications temps réel Environnement de développement performant Adaptable à de nombreux processeurs CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Applications Téléphonie PDA Bornes interactives Machine à coudre (Bernina) Machine à voter (Unisys) Robot domestique (Fujitsu) Chaudières, réfrigérateur … CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Pourquoi ce cours ? Besoin pour l’ESIEE Demande de Laurent Ellerbach et de son équipe Cours en français Accessible aux non informaticiens purs et durs Basé sur l’exemple Mis à la disposition des enseignants CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Groupe ESIEE École d’ingénieurs BAC+5 École de technologues BAC+3 Domaines de compétence Électronique et microélectronique Informatique Systèmes embarqués Télécommunications CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Équipe Conception et rédaction Jean CALLOT Ingénieur ESIEE Michel DUPLESSY Ingénieur INPG Liliane PIEDFORT Agrégée de physique Conseiller Olivier COME Technologue ESTE et EMVP (Embedded Most Valuable Professional) CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Les informaticiens Formation orientée applications haut niveau Peu intéressés par les couches basses Développent souvent sur la machine sur laquelle tournera l’application (PC ou station de travail) Développent avec des outils puissants qui cachent en général les problèmes liés à la cible (UML, Visual Studio…) CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Les électroniciens Spécialistes de l’électronique, pas de l’informatique Dans le meilleur des cas ils ont des connaissances En assembleur En langage C Sur les microcontrôleurs Peu ou pas de connaissances des langages objets Peu ou pas de connaissances système CE4.2 Journées académiques Microsoft 2005

Évolution de l’électronique Arrivée de nouveaux produits nécessitant un noyau temps réel Temps réel non critique (plus de 90% des cas) Interface homme/machine important Importance du coût Le matériel et une bonne partie du logiciel devront être réalisés par les électroniciens Nécessité d’une double compétence CE4.2 Journées académiques Microsoft 2005

Électroniciens BAC+2/BAC+3 Enseignement très cloisonné Évolution lente : pour mettre en place un nouveau cours il faut en supprimer un autre Budget réduit pour l’équipement des salles Nécessité de formation des enseignants Difficulté pour l’élaboration de nouveaux cours Formations type constructeur non adaptées à ce genre de public CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Électroniciens BAC+5 Évolution plus rapide Corps enseignant plus polyvalent Plus de temps accordé aux projets et stages permettant de diversifier les domaines abordés Actions de recherche et développement Proches des besoins de l’industrie CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Pédagogie Les étudiants supportent de moins en moins les cours théoriques en amphi Caractéristiques du cours développé Magistral : très peu Participatif : les étudiants manipulent au fur et à mesure du passage des diapositives Basé sur des exercices simples à réaliser Présentation de l’exercice Correction de l’exercice Pédagogie adaptée à de petits groupes CE4.2 Journées académiques Microsoft 2005

Caractéristiques du cours Cours de base simple, mais concret Permet de comprendre les grandes fonctions d’un OS à travers des exemples gradués Permet d’aborder ultérieurement un cours standard du marché ou une auto formation Objectifs Formation de BAC+3 Premier niveau pour des BAC+5 Reconversion d’équipes industrielles Auto formation CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Organisation du cours Deux grandes parties « Émulateur » « Cible » La partie émulateur permet de se familiariser avec les outils et d’acquérir des connaissances de base sans se soucier des problèmes liés au matériel La partie cible complète ces connaissances et introduit les bases de la gestion de périphériques CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Émulateur Permet de développer et de visualiser le résultat sur le PC de développement Ne nécessite pas de matériel externe Couvre une bonne partie des connaissances fondamentales Chapitres 101 à 112 CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Cible La cible ou target est un matériel sur lequel tournent le noyau et les applications. La cible peut être de type x86 (STPC, Géode…), ARM (Intel, Freescale…), SHx (Hitachi) Un PC standard peut servir de cible s’il dispose d’une interface vidéo de type VESA et d’une carte réseau Ethernet compatible NE2000. Le cours a été développé sur une cible STPC STMicroelectronics Chapitres 201 à 209 CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Cible STPC CE4.2 Journées académiques Microsoft 2005

101 Installation de Platform Builder Installation de l’outil de développement Platform Builder Réparation de Platform Builder Désinstallation de Platform Builder CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 102 Généralités Présentation de notions de base Système temps réel Système embarqué Configurations de base Process, thread, tâche Description de l’Operating System (OS) Architecture mémoire CE4.2 Journées académiques Microsoft 2005

103 Génération d’une plate-forme Prise en main de Platform Builder Réalisation d’un noyau Configuration de la cible Essai du noyau CE4.2 Journées académiques Microsoft 2005

Génération de plate-forme Exemple Génération de plate-forme CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 File→New Platform CE4.2 Journées académiques Microsoft 2005

Accueil de l’assistant : → Next CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 BSP→Emulator: X86 CE4.2 Journées académiques Microsoft 2005

Choix du type de plate-forme Pour la plupart des essais de base prendre l’option Industrial Controller « Industrial Controller » est très simple et assez passe-partout pour des commandes d’automates industriels ou de petites applications. CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Nom de la plate-forme Par défaut les plates-formes sont sauvées dans «..\WINCE420\PUBLIC » dans un dossier qui correspond au nom saisi dans la boîte de dialogue Afin de différencier les fichiers de PUBLIC et ceux des plates-formes créées, nous ferons en général commencer les noms par z_ CE4.2 Journées académiques Microsoft 2005

Choix : type et nom de plate-forme CE4.2 Journées académiques Microsoft 2005

Choix des options de plate-forme CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Choix du réseau CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Fin : →Finish CE4.2 Journées académiques Microsoft 2005

Configuration obtenue CE4.2 Journées académiques Microsoft 2005

104_1 Génération d’applications WCE Console Application WCE Application Téléchargement des applications Test des applications CE4.2 Journées académiques Microsoft 2005

104_2 Debugging élémentaire Premier contact avec les outils de mise au point Génération en vue de debug Usage des points d’arrêt, pas à pas Visualisations diverses Code Variables Mémoire Pile … CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 105 Clavier français Montrer comment ajouter ou remplacer un driver à la plate-forme fournie d’origine Configuration par défaut : claviers Anglais, Japonais et Coréens, pas de clavier français → Ajout à notre catalogue d’un driver pour un clavier français → Remplacement dans notre plate-forme du driver par défaut par le driver ajouté au catalogue CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 106_1 Threads Génération d’une application avec thread Création d’un thread Identification d’un thread Suspension/Reprise d’un thread Destruction d’un thread Contrôle de l’exécution Exemples de threads CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 106_2 Synchronisation Création d’une application ayant plusieurs threads Synchronisations entre threads Section critique Mutex Événement Sémaphore Exemples pratiques CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 106_3 Kernel Tracker Écrire un programme multithread en mode debug Explorer Kernel Tracker, outils avancé de mise au point Visualisation des threads Visualisation des événements ... CE4.2 Journées académiques Microsoft 2005

107_1 – 107_2 Problème des trains Présentation du problème Application des chapitres threads et synchronisation à un exemple concret Corrigé CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 108_1 Principe des drivers Architecture d’un driver sous Windows CE Fonctions système disponibles Fonctions système à créer Écriture d’un driver élémentaire Génération du driver Écriture d’une application élémentaire Génération de l’application Essai du driver CE4.2 Journées académiques Microsoft 2005

108_2 - 108_3 DRIVER exercice et corrigé Sous une plate-forme de type Industrial Controler préparer un driver « STR » capable de gérer un buffer en mémoire Écrire une chaîne de caractères en majuscules dans le buffer du driver par STR_Write Lire le buffer par STR_Read Modifier le buffer par des STR_IOControl (par exemple, passage majuscule/minuscule, cryptage) Renvoyer le buffer modifié CE4.2 Journées académiques Microsoft 2005

109_1 – 109_2 Gestion mémoire exercice et corrigé Organisation de la mémoire Découpage en slots Rôle du slot 0 Passage d’adresses entre le slot 0 et le slot de l’application Passage à un driver de pointeurs créés dynamiquement dans le slot 0 CE4.2 Journées académiques Microsoft 2005

110-1 – 110_2 Communication inter Process Notions de mémoire locale, publique Passage d’adresses entre deux process Mapping des adresses Gestion des droits CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 111 Accès Internet Réalisation d’une plate-forme permettant l’accès à Internet Paramétrages réseau CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 112 Gestion de fichiers Exemple de gestion de fichiers directement sur une plate-forme diskless Accès aux zones mémoire réservées pour les fichiers Création, lecture, écriture, fermeture de fichiers CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 201 Boot CEPC CEPC : plate-forme de référence pour architecture PC x86 Création de la disquette d’amorçage de la cible Préparation du téléchargement par le port éthernet Paramétrage de la carte réseau Configuration du PC hôte CE4.2 Journées académiques Microsoft 2005

202 génération de plate-forme Générer une plate-forme à télécharger dans une cible CEPC Configurer les connexions de l’hôte et de la cible Télécharger Windows CE dans la cible Recueillir les informations de debug fournies pendant le téléchargement CE4.2 Journées académiques Microsoft 2005

203 OAL OEM Adaptation Layer Présentation de la couche OAL Survol de l’initialisation de la plate-forme Fonctionnement des interruptions dans une architecture PC classique à base de x86 Interruptions dans Windows CE Étude de l’exemple de la liaison série Contrôleur de ligne série 16550 Contrôleur d’interruption 8259 Programmes d’initialisation du 16550 et du 8259 CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 204 Boot Loader Introduction de la notion de Boot Loader Donner un aperçu de l’organisation proposée avec Platform Builder Présenter des variantes utilisables avec une architecture à base de x86 CE4.2 Journées académiques Microsoft 2005

205_1 –205_2 Serial en polling exercice et corrigé Écrire un driver rudimentaire et l’intégrer dans Windows CE pour prendre connaissance des mécanismes Le driver choisi est le gestionnaire d’une liaison série classique dans le monde PC à base de l’UART 16550 Ce composant présent sur la cible utilisé de la façon la plus simple, en polling, nous permettra d’essayer notre driver CE4.2 Journées académiques Microsoft 2005

206_1 Généralités sur les IT Présentation des notions nécessaires pour aborder le traitement des interruptions Organisation générale des interruptions sous Windows CE Étude des composants principaux Handler ISR IST Fonctions utiles CE4.2 Journées académiques Microsoft 2005

206_2 –206_3 Serial en IT exercice et corrigé Écrire un programme qui va communiquer par une liaison série La transmission se fera en polling La réception sera gérée par interruption On utilisera la deuxième liaison série connectée sur l’IRQ3 de la STPC CE4.2 Journées académiques Microsoft 2005

207_1 – 207_2 Utilisation de COM1 exercice et corrigé Utiliser la ligne série de la plate-forme CEPC avec les logiciels fournis en standard par Windows CE Configurer le port série CE4.2 Journées académiques Microsoft 2005

208_1 – 208_2 Gestion du port parallèle Faire fonctionner un module d’affichage LCD couplé sur le port parallèle de la cible CEPC Étude sommaire du port parallèle standard des PC Étude sommaire du module LCD Écriture d’un driver pour ce module Écriture d’une application pour afficher deux lignes sur le module LCD Téléchargement dans le CEPC Exécution CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 209 Web Pad Installation d’un serveur Web élémentaire sur la plate-forme CEPC Envoi d’une page d’accueil Utilisation d’Internet Explorer sur la cible CE4.2 Journées académiques Microsoft 2005

Problème des trains Michel DUPLESSY DEBOGGAGE Problème des trains Michel DUPLESSY CE4.2 Journées académiques Microsoft 2005

Threads et synchronisation CE4.2 Journées académiques Microsoft 2005

Objectif de la présentation Application à un exemple concret des chapitres « Threads » et « Synchronisation » Exemple de débogage avec Kernel Tracker Rappel des notions nécessaires présentées dans des chapitres précédents Process Thread Synchronisation CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Process Un process ou processus est une instance d’application en cours ou en attente d’exécution Un process démarre avec un seul thread (Primary Thread) mais il peut créer d’autres threads Un process peut avoir plusieurs threads en cours d’exécution simultanément Process : le mot français processus est une bonne traduction de process, mais process se trouve très généralement employé ; nous prendrons l’une ou l’autre forme. Par contre, au pluriel, nous utiliserons processus ou encore process, car la forme plurielle anglaise processes est difficile à conserver ; ce faisant, nous appliquons une règle identique à celle utilisée pour le mot francisé « mess ». Thread : le programme qui compose le process est organisé sous forme de séquences indépendantes qui peuvent s’exécuter simultanément dans un ou plusieurs processeurs (accélération du traitement, répartition de charge entre CPU). Les threads utilisent, et donc partagent, les ressources allouées au process : espace mémoire, fichiers, sémaphores, etc. et certaines ressources privées (registres). Problème de la synchronisation entre threads… Ce mécanisme est particulièrement intéressant lorsque le processeur peut exécuter simultanément plusieurs threads ; c’est le cas notamment de certains Pentium récents. CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Thread Thread Séquence obtenue par décomposition d’un process Séquence de code exécutable et autonome Accède à l’ensemble des ressources du process Une priorité est attribuée à chaque thread Windows CE 256 niveaux de priorités Ordonnancement (scheduling) par le noyau Système préemptif Priorité tournante pour des threads de même priorité Scheduler (ordonnanceur) : il s’agit du logiciel du système qui gère l’exécution des threads éligibles à un instant donné. Lorsqu’un thread est créé on lui attribue ou il hérite d’un niveau de priorité, qu’il conservera excepté dans quelques circonstances particulières. Lorsque tous les threads des niveaux plus prioritaires ont rendu la main, le scheduler rend actif le thread s’il est seul sur ce niveau, ou bien choisit par un algorithme le thread à réveiller ; dans Windows CE la priorité sur un même niveau est gérée par priorité tournante Priorité tournante (Round Robin) : quand plusieurs threads ont la même priorité, le système alloue les quanta de temps de façon circulaire pour éviter qu’un même thread soit réélu sans que d’autres threads de même niveau de priorité aient pu bénéficier de quanta de temps. Ce schéma s’oppose à la priorité fixe ; il a l’avantage d’éviter la monopolisation de la ressource temps par un thread, par contre cela réagit sur le fonctionnement déterministe du système. Préemptif : ceci correspond à une caractéristique très importante d’un système. En simplifiant, cela indique qu’à tout instant où le système reprend la main, son scheduler peut prévoir le bon enchaînement des exécutions des threads dans le respect des contraintes de temps définies par les priorités. Cela exclut qu’une tâche monopolise tous les quanta disponibles pendant une durée indéfinie ; le système aura forcément repris la main au moment de l’allocation d’un quantum et pourra agir en ayant une vision complète des threads en attente. CE4.2 Journées académiques Microsoft 2005

Synchronisation des tâches Dès que plusieurs threads sont en jeu, il faut coordonner les exécutions Problème classique du verrou mortel Différentes techniques sont disponibles : section critique, Mutex, Événement, Sémaphore On peut nommer les objets CE4.2 Journées académiques Microsoft 2005

Synchronisation par événement Gestion des événements Création Prise de possession Restitution Transmission de données CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Sémaphore Contrôle le nombre des accès à une ressource par la distribution de jetons Valeur maximale fixée à la création du sémaphore Chaque utilisateur prend (si possible) et restitue un ou plusieurs jetons sur le sémaphore Chaque fois qu’un jeton est pris, le compteur de jeton est décrémenté Chaque fois qu’un jeton est restitué, le compteur de jeton est incrémenté Lorsque le nombre de jetons disponibles est 0, la ressource n’est plus disponible et le demandeur attend CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : problème Des trains doivent circuler sur une voie ferrée à sens unique De A vers B De B vers A Au plus, trois trains (dans le même sens !) peuvent se suivre sur la voie unique Cinq trains sont en attente de chaque côté Objectif : faire passer les trains sans collision CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : solution (1) Plusieurs trains pouvant se suivre dans le même sens, il n’y a pas exclusion mutuelle entre les trains → Contrôle par un sémaphore La voie étant à sens unique → Contrôle par des événements de sens Trois jetons car on a un maximum de trois trains simultanément sur la voie. On pourrait sans difficulté avoir un nombre de trains différent suivant le sens. CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : solution (2) Chaque train sera un thread 5 threads AB_MAIN (A vers B) 5 threads BA_MAIN (B vers A) Pour qu’un train puisse entrer sur la voie il lui faudra obtenir l’événement de sens un des jetons du sémaphore Lors de la création des threads (fonction CreateThread) on passera un numéro de 1 à 5 pour différencier les threads de chaque sens (seulement deux threads à écrire au lieu de dix) On pourrait créer les threads dans des boucles, le but n’est pas ici d’optimiser le code. CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : programme (1) Programme principal Créer les 10 trains (10 threads) Créer deux événements de sens, A → B et B → A Créer un sémaphore à 3 jetons Gérer le passage des trains Fermer tout ce qui a été ouvert CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : programme (2) Boucle de gestion des trains Libérer les jetons Positionner A vers B pendant 500 ms Attendre l’arrivée des trains en récupérant les jetons Faire la même chose pour l’autre sens S’arrêter quand tous les trains sont passés CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : programme (3) Thread train Récupérer le numéro du train Attendre le sémaphore et l’événement de sens Envoyer un message : « train numéro x parti » Attendre 1 seconde (durée du trajet) Envoyer un message : « train numéro x arrivé » Rendre le jeton CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : main (1) #include "stdafx.h" #include "winbase.h" DWORD WINAPI AB_MAIN (LPVOID p); DWORD WINAPI BA_MAIN (LPVOID p); HANDLE SEM; HANDLE SENS_AB,SENS_BA; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : main (2) // Définitions et réservations // Paramètres passés aux threads : numéros de 1 à 5 DWORD ThPa1 = 1; DWORD ThPa2 = 2; DWORD ThPa3 = 3; DWORD ThPa4 = 4; DWORD ThPa5 = 5; DWORD val; // Handles utilisés HANDLE AB_11, AB_12, AB_13, AB_14, AB_15, BA_21, BA_22, BA_23, BA_24, BA_25; CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : main (3) // Création d'un sémaphore à 3 jetons possibles, vide au départ SEM=CreateSemaphore(NULL,0,3,NULL); // Création des événements de sens SENS_AB=CreateEvent(NULL,TRUE,FALSE,NULL); SENS_BA=CreateEvent(NULL,TRUE,FALSE,NULL); printf("début du main\n\n"); CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : main (4) // Création des 10 threads AB_11=CreateThread(0,0,AB_MAIN,&ThPa1,0,0); AB_12=CreateThread(0,0,AB_MAIN,&ThPa2,0,0); AB_13=CreateThread(0,0,AB_MAIN,&ThPa3,0,0); AB_14=CreateThread(0,0,AB_MAIN,&ThPa4,0,0); AB_15=CreateThread(0,0,AB_MAIN,&ThPa5,0,0); BA_21=CreateThread(0,0,BA_MAIN,&ThPa1,0,0); BA_22=CreateThread(0,0,BA_MAIN,&ThPa2,0,0); BA_23=CreateThread(0,0,BA_MAIN,&ThPa3,0,0); BA_24=CreateThread(0,0,BA_MAIN,&ThPa4,0,0); BA_25=CreateThread(0,0,BA_MAIN,&ThPa5,0,0); CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : main (5) // Boucle principale do { // Attente avant départ de A vers B Sleep(1000); // Libération des 3 jetons ReleaseSemaphore(SEM,3,NULL); // Set de l’événement de sens de A vers B SetEvent(SENS_AB); // Attente de 500 tics Sleep(500); // Reset de l’événement de sens de A vers B ResetEvent(SENS_AB); CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : main (6) // Attente de l'arrivée des trains et récupération des 3 jetons WaitForSingleObject(SEM,INFINITE); // Attente avant les départs de B vers A Sleep(1000); // Libération des 3 jetons ReleaseSemaphore(SEM,3,NULL); CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : main (7) // Set de l’événement de sens de B vers A SetEvent(SENS_BA); // Attente de 500 tics Sleep(500); // Reset de l’événement de sens de B vers A ResetEvent(SENS_BA); // Attente de l'arrivée des trains et récupération des 3 jetons WaitForSingleObject(SEM,INFINITE); CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : main (8) // Vérification de l'arrivée du dernier train GetExitCodeThread(BA_25,&val); printf("code du thread : %d\n",val); } while(val==259); // Tant que le dernier train n’est pas arrivé printf("fin du main\n"); getchar(); CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : main (9) // Fermeture des handles CloseHandle(AB_11); CloseHandle(AB_12); CloseHandle(AB_13); CloseHandle(AB_14); CloseHandle(AB_15); CloseHandle(BA_21); CloseHandle(BA_22); CloseHandle(BA_23); CloseHandle(BA_24); CloseHandle(BA_25); CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : main (10) CloseHandle(SEM); CloseHandle(SENS_AB); CloseHandle(SENS_BA); return 0; } CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : AB_MAIN (1) DWORD WINAPI AB_MAIN(LPVOID p) { // Initialisation des variables de retour // de la fonction WaitForSingleObject DWORD SENS=1,SEMA=1; // Récupération du numéro du thread (DWORD pp) // p est un pointeur de 'void' // p pointe sur le paramètre passé au thread DWORD pp=*(DWORD*)p; CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : AB_MAIN (2) // Attente de l'obtention du sens et du sémaphore // Les 2 valeurs doivent être égales à zéro while(SENS!=0 || SEMA!=0) { SENS=WaitForSingleObject(SENS_AB,INFINITE); SEMA=WaitForSingleObject(SEM,1); } CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : AB_MAIN (3) // Traitement printf("départ du train AB %d\n",pp); Sleep(1000); // Durée du trajet printf("arrivée du train AB %d\n",pp); // Libération du sémaphore ReleaseSemaphore(SEM,1,NULL); return 0; } CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : BA_MAIN (1) DWORD WINAPI BA_MAIN(LPVOID p) { // Initialisation des variables de retour // de la fonction WaitForSingleObject DWORD SENS=1,SEMA=1; // Récupération du numéro du thread DWORD pp // p est un pointeur de 'void' // p pointe sur le paramètre passé au thread DWORD pp=*(DWORD*)p; CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : BA_MAIN (2) // Attente de l'obtention du sens et du sémaphore // Les 2 valeurs doivent être égales à zéro while(SENS!=0 || SEMA!=0) { SENS=WaitForSingleObject(SENS_BA,INFINITE); SEMA=WaitForSingleObject(SEM,1); } CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Trains : BA_MAIN (3) // Traitement printf("départ du train BA %d\n",pp); Sleep(1000); // Durée du trajet printf("arrivée du train BA %d\n",pp); // Libération du sémaphore ReleaseSemaphore(SEM,1,NULL); return 0; } CE4.2 Journées académiques Microsoft 2005

Résultat On a un peu triché avec les accents CE4.2 Journées académiques Microsoft 2005

Plate-forme de travail CE4.2 Journées académiques Microsoft 2005

Outils de Platform Builder Platform Builder propose un ensemble d’outils spécialisés et un générateur de macro pour aider à la mise au point d’applications, vérifier le bon fonctionnement temporel, étudier les performances, visualiser les fenêtres, etc. Parmi ces outils, le « Remote Kernel Tracker » permet de visualiser graphiquement la chronologie d’une application : création des process, threads, événements, enchaînement des événements, mutex, etc. Outils : consulter les entrées de la documentation « Remote tools » et « Macros and Add-ins ». Le générateur de macros proposé est semblable à celui qui est disponible dans d’autres applications Microsoft : même mécanisme d’enregistrement ou de création directe par un programme VBA (Visual Basic for Application), et en conséquence, même puissance. CE4.2 Journées académiques Microsoft 2005

Modification de l’exemple Dans notre exemple de programme les impressions par printf sont elles-mêmes gérées par des événements, sections critiques, etc. Pour simplifier sous Kernel Tracker la visualisation des résultats qui nous intéressent, nous avons reconstruit l’exemple en supprimant des impressions Outils : consulter les entrées de la documentation « Remote tools » et « Macros and Add-ins ». Le générateur de macros proposé est semblable à celui qui est disponible dans d’autres applications Microsoft : même mécanisme d’enregistrement ou de création directe par un programme VBA (Visual Basic for Application), et en conséquence, même puissance. CE4.2 Journées académiques Microsoft 2005

Découverte de Kernel Tracker Téléchargement du noyau Lancement de Remote Kernel Tracker Lancement de TRAINS Collecte des données Attente de quelques secondes Fin de TRAINS après click sur OK Fin de la collecte après quelques secondes Déconnexion de la cible Analyse des données Kernel Tracker : raccourci pour « Remote Kernel Tracker ». Le mot remote correspond au fait que l’outil d’analyse n’est pas dans la cible ; la surveillance est opérée par un outil de la plate-forme. CE4.2 Journées académiques Microsoft 2005

Démarrage de Remote Kernel Tracker CE4.2 Journées académiques Microsoft 2005

Accepter le choix par défaut : OK Journées académiques Microsoft 2005

Début de Remote Kernel Tracker CE4.2 Journées académiques Microsoft 2005

Exemple de visualisation Menus… Échelle de temps Info Bulle Fenêtre de visualisation Threads Légende CE4.2 Journées académiques Microsoft 2005

Phase de démarrage de TRAINS Les threads créés sont de même priorité ; ils démarrent dans l’ordre de création par le thread primaire mais il ne faut pas compter sur ce genre de considération. Dans un système rien n’interdit, pour des threads de même priorité, que l’ordre soit imposé par l’algorithme utilisé par le mécanisme d’élection. Prologue CE4.2 Journées académiques Microsoft 2005

Positionnement du curseur Click gauche CE4.2 Journées académiques Microsoft 2005

Positionnement du marqueur 1 Ouverture du menu par un click droit CE4.2 Journées académiques Microsoft 2005

Positionnement du marqueur 2 Curseur déplacé CE4.2 Journées académiques Microsoft 2005

Mesure du temps entre marqueurs Écart visualisé par une hachure Écart mesuré numériquement CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Démarrage des threads CE4.2 Journées académiques Microsoft 2005

Circulation des premiers trains 3 trains partent 2 trains attendent 3 trains arrivent 2 trains prêts Démarrage des threads 3 trains attendent CE4.2 Journées académiques Microsoft 2005

Détail du départ d’un train Libération du sémaphore Autorisation donnée A→B Autorisation reçue Train circule CE4.2 Journées académiques Microsoft 2005

Fin des premiers threads Restitution d’un jeton Fin du thread 1 Fin du thread 2 Fin du thread 3 CE4.2 Journées académiques Microsoft 2005

Action directe sur les threads Ouverture du menu par click droit sur le nom du thread CE4.2 Journées académiques Microsoft 2005

Circulation des trains suivants CE4.2 Journées académiques Microsoft 2005

Arrivée du dernier train CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Fin du programme Attente du getchar() CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Conclusion Nous avons exploré quelques aspects de Kernel Tracker Visualisation de l’enchaînement des tâches Visualisation des objets Mesure des temps Utilisation en tant qu’analyseur logique CE4.2 Journées académiques Microsoft 2005

Commande de LCD Liliane PIEDFORT DRIVER Port Parallèle Commande de LCD Liliane PIEDFORT CE4.2 Journées académiques Microsoft 2005

EXEMPLE DE DRIVER PORT PARALLELE Commande d’un module d’affichage LCD CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Plan Fonctionnement du port parallèle Fonctionnement du LCD Signaux Commandes Notion de driver Driver du LCD Programme d’application CE4.2 Journées académiques Microsoft 2005

Port Parallèle d’un PC (1) Le port parallèle standard (SPP) est un port prévu dès l’origine du PC pour obtenir une liaison plus rapide que la liaison série de l’époque, utile pour commander une imprimante 0x378 : Parallel Printer 1 (LPT1) associé à l’IRQ7 CE4.2 Journées académiques Microsoft 2005

Port Parallèle d’un PC (2) Registre de données (D7-D0) à l’adresse de base du port Registre de Status (S7-S3) à l’adresse de base du port + 1 utilisé pour ses cinq bits de poids forts seulement S7-S3, S2-S0 inutilisés ou inexistants Registre de commande (C4-C0) à l’adresse de base du port + 2 Utilisé pour ses cinq bits de poids faibles C4-C0, C7-C5 inutilisés ou inexistants Pour le LCD nous n’utilisons que les bits C3 et C0 En fait on retrouve dans de vieux documents le bit C4 qui fut, à l’origine, utilisé pour autoriser ou interdire des interruptions lors du changement d’état du bit 6 du registre de status. Les bits C4 et C5 sont utilisés dans le port parallèle modernisé EPP. CE4.2 Journées académiques Microsoft 2005

Registres du port parallèle Registre de données Adresse de base D7 D6 D5 D4 D3 D2 D1 D0 Poids fort Registre de status (lecture) Poids faible Adresse de base + 1 Les noms attribués dans la littérature aux bits des registres de commande et de status sont à géométrie variable du fait de l’inversion de certains signaux et suivant qu’on se réfère à l’attribution du signal ou au nom porté par la broche. Par exemple, le bit C3 du registre de contrôle est dénommé +SLCT IN dans le document de base IBM. Une écriture avec un 1 dans le bit C3 permet de sélectionner une imprimante. Il est présenté sur la broche 17 du connecteur DB25 après inversion, ce qui est cohérent avec le nom donné à la broche : -SLCT IN. Quand on lit le registre de commande, le signal présent sur la broche est inversé et on récupère bien dans le registre un bit +SLCT IN. S7 S6 S5 S4 S3 Registre de contrôle Adresse de base + 2 C4 C3 C2 C1 C0 CE4.2 Journées académiques Microsoft 2005

Registres données et commande Nous ne montrons que ce qui concerne l’écriture puisque nous n’utiliserons pas de lecture avec notre afficheur. D6 D6 D7 D7 Registre données Buffer Registre commande Buffer CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Écriture sur un port VOID WRITE_PORT_UCHAR(PUCHAR Port, UCHAR Value); Parameters Port [in] Pointer to the port that must be a mapped memory range in I/O space. Value [in] Byte to be written to the port. Return Values None. Nota : les sorties C0, C1, C3 du registre de commande sont inversées, pour être directement compatibles avec les signaux standards d’une imprimante. CE4.2 Journées académiques Microsoft 2005

Module d’affichage LCD Le module HD44780 possède Une mémoire de 80 caractères : Display Data RAM (DD RAM) Un générateur de police de caractère Deux registres internes: DR et IR Taille de l’afficheur utilisé : Nombre de lignes d’affichage : 2 Nombre de caractères par ligne : 20 CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Signaux du module LCD Port de données D7-D0 RS Register Select E Enable R/nW Lecture/écriture, ici écriture seule: 0 VDD Alimentation 5V VSS Masse VL Contrôle du contraste, maximal = 0 CE4.2 Journées académiques Microsoft 2005

Câblage du module LCD sur le port parallèle Module d’affichage LCD D7 D6 D5 D4 D3 D2 D1 D0 RS E R/W VSS VL VDD VDD VDD 10 KΩ 10 KΩ VDD Les nombres 1 à 9 et 17 correspondent au brochage de la prise DB25 du port parallèle. Nous utiliserons aussi la broche 16 associée au bit C2 du registre de commande pour alimenter le module : un 1 dans la position C2 qui n’est pas inversée, permet d’appliquer une tension correcte à la broche VDD du module. VL à la masse donne le contraste maximum D7 D6 D5 D4 D3 D2 D1 D0 C3 C0 Port parallèle 9 8 7 6 5 4 3 2 17 1 CE4.2 Journées académiques Microsoft 2005

Registres internes du module LCD Deux registres internes IR registre d’instruction DR registre de données Commande des registres par deux signaux RS : Register Selector relié à la broche nC3 du port parallèle différencie ces deux registres: RS = 0 accès à IR RS = 1 accès à DR E : Enable relié à la broche nC0 du port parallèle, E 1 valide l’introduction des données dans les registres CE4.2 Journées académiques Microsoft 2005

Séquence d’écriture dans IR et DR Repos DR RS=1 E=0 Repos IR RS=0 E=0 Donnée → DR RS=1 E→0 Donnée → IR RS=0 E→0 CE4.2 Journées académiques Microsoft 2005

Commandes pour écrire dans IR Signaux de commande en position de repos RS relié à nC3 et E relié à nC0 mais état complémenté des bits C3 et C0 d’où : commande . . . . 1 x x 1 (RS=0 E=0) Mettre l’instruction sur le port parallèle D7-D0 Écrire cette instruction dans le registre IR commande . . . . 1 x x 0 (RS=0 E=1) Retour à l’état de repos commande . . . . 1 x x 1 (RS=0 E=0) CE4.2 Journées académiques Microsoft 2005

Commandes pour écrire dans DR Signaux de commande en position de repos RS relié à nC3 et E relié à nC0 mais état complémenté des bits C3 et C0 d’où : commande . . . . 0 x x 1 (RS=1 E=0) Mettre la donnée sur le port parallèle D7-D0 Écrire cette donnée dans le registre DR commande . . . . 0 x x 0 (RS=1 E=1) Retour à l’état de repos commande . . . . 0 x x 1 (RS=1 E=0) CE4.2 Journées académiques Microsoft 2005

Détail des commandes IR et DR Afficheur LCD à deux lignes (C1 inutilisé, à 0 ) C2 inutilisé, mis à 1 Repos en prévision d’une commande pour IR %1101 = 0xD «CTRL» RS=0 E=0 Entrée de la commande dans IR %1100 = 0xC «CTRLEN» RS=0 E=1 Repos en prévision d’une commande pour DR %0101 = 0x5 «DATA» RS=1 E=0 Entrée de la commande dans DR %0100 = 0x4 «DATAEN»  RS=1 E=1 Les noms utilisés seront définis dans le programme par des #define. CTRL : pour la sélection du registre de contrôle CTRLEN : pour registre de contrôle enable DATA : pour la sélection du registre de données DATAEN : pour registre de contrôle enable CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 DDRAM du module LCD Le module LCD contient une DDRAM gérée automatiquement par les écritures dans le registre DR La donnée écrite dans le registre DR est transférée systématiquement dans la DDRAM à une adresse définie par un compteur d’adresse interne (AC) AC incrémenté à chaque écriture dans DR AC initialisé par écriture de l’instruction Set DDRAM address dans le registre IR CE4.2 Journées académiques Microsoft 2005

LCD à 2 lignes de 20 caractères DDRAM 0x00 Première ligne 20 caractères 0x13 20 caractères 0x27 0x40 Seconde ligne 20 caractères 0x53 0x54 20 caractères 0x67 CE4.2 Journées académiques Microsoft 2005

Instructions pour le LCD (1) Clear Display: 0x01 Return Home: 0x02 Entry Mode Set: 0x04 à 0x07 (%000001 I/D S) I/D = 1 incrément S = 0 pas de décalage Display ON/OFF: 0x08 à 0x0F (%00001 D C B) D = 0 display OFF C = 0 cursor OFF B = 0 blink OFF Pour les détails de ces commandes il faut consulter la documentation du module LCD. Ici, ce sont les valeurs utilisées dans notre application qui sont mentionnées. CE4.2 Journées académiques Microsoft 2005

Instructions pour le LCD (2) Function Set: 0x38 ici (%001 DL N F 00) DL=1 Interface 8 bits N=1 LCD à deux lignes (0 pour une ligne) F=0 Matrice 5x7 0x30 au reset Set DDRAM address: 0x80 à 0xFF (bit 7 à 1) (%1AAAAAAA) AAAAAAA Adresse sur 7 bits à placer dans le compteur AC CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Initialisation du LCD Timing à respecter après la mise sous tension Séquence de commande obligatoire de configuration du LCD CE4.2 Journées académiques Microsoft 2005

Timing à respecter après Power On CE4.2 Journées académiques Microsoft 2005

Séquence d’initialisation RESET:Instruction 0x30 (Function Set: interface 8 bits) envoyée 3 fois Display OFF Display ON Clear Display Function Set: taille réelle de l’interface, nombre de lignes et police. (non modifiable ensuite) Mode Set: gestion affichage (décalage texte, incrément d’adresse mémoire) CE4.2 Journées académiques Microsoft 2005

Exemple d’envoi de commande // Mise du port dans l’état repos commande WRITE_PORT_UCHAR(PARCOMMAND, CTRL); Sleep(15); // Attente de 15ms après la mise sous tension. // Function Set 1 (interface 8 bits) WRITE_PORT_UCHAR(PARDATA, 0x30); WRITE_PORT_UCHAR(PARCOMMAND, CTRLEN); Sleep(2); // Attente de 2 ms (signal ENABLE actif) Sleep(5); // Attente de 5 ms avant la commande suivante. CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Notion de driver CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Driver Driver : raccourci pour « device driver », souvent traduit par pilote ou contrôleur de périphérique Device : dispositif physique (périphérique) ou logique (protocole, service, périphérique virtuel, fichier) dont le fonctionnement nécessite des commandes et des ressources au sens large, mémoire, temps, port, etc. Device driver : module logiciel qui assure l’interface entre le système et le device Dans la littérature, le mot « handler » est souvent utilisé dans des circonstances voisines, par exemple on trouvera un « serial line handler ». Dans Windows CE, le mot handler semble réservé au logiciel très proche du hardware, par exemple « exception handler » ou « interrupt handler », alors que le mot driver correspond à une approche fonctionnelle beaucoup plus synthétique ; un device driver regroupe les aspects fonctionnels et pourra, dans sa réalisation pratique, faire appel à un ou plusieurs handlers. CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Règle de nommage Nom commençant par un préfixe (XXX de façon symbolique) de trois caractères pour le driver, par exemple TTY pour une ligne série ou PAR pour l’exemple présenté suivi du caractère underscore et du nom de la fonction réalisée. ex : PAR_Init CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Fichier .def Sert à décrire un module pour orienter le travail de l’éditeur de liens lors de la création d’un exécutable .exe ou d’une dll Fichier à créer en respectant une structure particulière Structure décrite dans la documentation sous l’entrée « Module-Definition Files » Nous n’utiliserons que le paragraphe LIBRARY et l’entrée EXPORT dans notre fichier .def Dll, .dll ou DLL ou dll pour : dynamic-link library En simplifiant, il s’agit d’un code exécutable appelé dynamiquement et qui va se dérouler dans le contexte de l’appelant, à la différence d’un .exe qui se déroule dans le contexte qui a créé pour lui par le système. CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Fonctions d’un driver XXX_Init XXX_Deinit XXX_Open XXX_Close XXX_Read XXX_Write XXX_IoControl XXX_Seek XXX_PowerUp XXX_PowerDown CE4.2 Journées académiques Microsoft 2005

Lien Driver Application XXX_Init appelé par RegisterDevice XXX_Open appelé par CreateFile XXX_IOControl appelé par DeviceIOControl XXX_Close appelé par CloseHandle XXX_Deinit appelé par DeregisterDevice CE4.2 Journées académiques Microsoft 2005

Driver de gestion du LCD CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 PARA.def CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Driver (1) // #include nécessaires #include "stdafx.h" #include <tchar.h> #include <nkintr.h> #include <wdm.h> #include <windev.h> CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Driver (2) // Définition des IOCTL #define IOCTL_PUTC \ CTL_CODE(FILE_DEVICE_UNKNOWN,2048,\ METHOD_BUFFERED,FILE_ANY_ACCESS) #define IOCTL_CURSEUR \ CTL_CODE(FILE_DEVICE_UNKNOWN,2049,\ METHOD_BUFFERED,FILE_ANY_ACCESS) CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Driver (3) // Définition des adresses du port parallèle #define PARBASE ((PUCHAR) 0x0378) #define PARDATA PARBASE #define PARCOMMAND PARBASE+2 // Définition des mots de commande #define CTRL 0xD #define CTRLEN 0xC #define DATA 0x5 #define DATAEN 0x4 CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Driver (4) BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { return TRUE; } CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Driver (5) DWORD PAR_Init(DWORD dwContext) { // Mise du port dans l’état repos commande DWORD dwRet = 1; WRITE_PORT_UCHAR(PARCOMMAND,CTRL); Sleep(15); // Envoi des trois Function Set de RESET // Positionnement de la donnée : 0x30 WRITE_PORT_UCHAR(PARDATA,0x30); // Function Set 1 WRITE_PORT_UCHAR(PARCOMMAND,CTRLEN); Sleep(2); WRITE_PORT_UCHAR(PARCOMMAND,CTRL); Sleep(5); CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Driver (6) // Function Set 2 WRITE_PORT_UCHAR(PARCOMMAND,CTRLEN); Sleep(2); WRITE_PORT_UCHAR(PARCOMMAND,CTRL); Sleep(1); // Function Set 3 Sleep(10); CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Driver (7) // Display OFF WRITE_PORT_UCHAR(PARDATA,0x08); WRITE_PORT_UCHAR(PARCOMMAND,CTRLEN); Sleep(2); WRITE_PORT_UCHAR(PARCOMMAND,CTRL); Sleep(10); // Display ON WRITE_PORT_UCHAR(PARDATA,0x0F); CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Driver (8) // Clear Display WRITE_PORT_UCHAR(PARDATA,0x01); WRITE_PORT_UCHAR(PARCOMMAND,CTRLEN); Sleep(2); WRITE_PORT_UCHAR(PARCOMMAND,CTRL); Sleep(10); // Function Set (2 lignes, 8 bits) WRITE_PORT_UCHAR(PARDATA,0x38); CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Driver (9) // Mode Set (incrément, pas de décalage) WRITE_PORT_UCHAR(PARDATA ,0x06); WRITE_PORT_UCHAR(PARCOMMAND,CTRLEN); Sleep(2); WRITE_PORT_UCHAR(PARCOMMAND,CTRL); Sleep(10); // Mise du port dans l’état repos data WRITE_PORT_UCHAR(PARCOMMAND,DATA); return dwRet; } CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Driver (10) BOOL PAR_Deinit(DWORD hDeviceContext) { BOOL bRet = TRUE; return bRet; } CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Driver (11) DWORD PAR_Open(DWORD hDeviceContext, DWORD AccessCode,DWORD ShareMode) { DWORD dwRet = 1; return dwRet; } BOOL PAR_Close(DWORD hOpenContext) { BOOL bRet = TRUE; return bRet; } CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Driver (12) BOOL PAR_IOControl(DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut) { int val; BOOL bRet = 1; CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Driver (13) switch(dwCode) { case IOCTL_PUTC: WRITE_PORT_UCHAR(PARDATA,pBufIn[0]); WRITE_PORT_UCHAR(PARCOMMAND, DATAEN); Sleep(2); WRITE_PORT_UCHAR(PARCOMMAND,DATA); break; CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Driver (14) case IOCTL_CURSEUR: // Positionnement du curseur à définir dans l’application val = pBufIn[0]; // Commande 1xxxxxxx (xxxxxxx 7 bits) val = val + 0x80; // Mise du port en repos commande WRITE_PORT_UCHAR(PARCOMMAND,CTRL); Sleep(2); CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Driver (15) // Envoi de la commande de positionnement WRITE_PORT_UCHAR(PARDATA,val); WRITE_PORT_UCHAR(PARCOMMAND,CTRLEN); Sleep(2); WRITE_PORT_UCHAR(PARCOMMAND,CTRL); // Mise du port en repos data WRITE_PORT_UCHAR(PARCOMMAND,DATA); break; }// switch CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Driver (16) *pdwActualOut = 1; return bRet; } // Fin du Driver LCD CE4.2 Journées académiques Microsoft 2005

Application LCD Écriture d’un message sur 2 lignes CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Application (1) // #include nécessaires #include "stdafx.h" #include <windev.h> // Définition des IOCTL #define IOCTL_PUTC \ CTL_CODE(FILE_DEVICE_UNKNOWN,2048,\ METHOD_BUFFERED,FILE_ANY_ACCESS) #define IOCTL_CURSEUR \ CTL_CODE(FILE_DEVICE_UNKNOWN,2049,\ METHOD_BUFFERED,FILE_ANY_ACCESS) CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Application (2) int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Application (3) // Déclarations et réservations HANDLE hDevice; CHAR carac1[1]; DWORD dwNb; HANDLE hPara; CHAR* pstring1 = " journées académiques"; CHAR* pstring2 = "  2005"; unsigned int i; CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Application (4) // Chargement du driver hDevice = RegisterDevice(TEXT("PAR"),1, TEXT("PARA_DRV.dll"),NULL); if(hDevice == 0) { MessageBox(NULL,_T("Pb Register PAR1:"), _T("PARA_APP"),MB_OK); return 0; } CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Application (5) // Ouverture du driver hPara = CreateFile(TEXT("PAR1:"),GENERIC_WRITE, 0,NULL,OPEN_EXISTING,0,0); if (hPara == INVALID_HANDLE_VALUE) { MessageBox(NULL,_T("Pb Ouverture PAR1:"), _T("PARA_APP"),MB_OK); DeregisterDevice(hDevice); CloseHandle(hDevice); return 0; } CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Application (6) // Envoi première chaîne de caractères for(i = 0; i <strlen(pstring1); i++) { carac1[0] = pstring1[i]; DeviceIoControl(hPara,IOCTL_PUTC,carac1,1, carac1,1,&dwNb,NULL); Sleep(10); } CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Application (7) // Positionnement du curseur au début de la ligne 2 carac1[0]=0x40; DeviceIoControl(hPara,IOCTL_CURSEUR, carac1,1,carac1,1,&dwNb,NULL); // Envoi deuxième chaîne for(i=0;i<strlen(pstring2);i++) { carac1[0]=pstring2[i]; DeviceIoControl(hPara,IOCTL_PUTC,carac1,1, carac1,1,&dwNb,NULL); Sleep(10); } CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Application (8) // Fermeture des handles CloseHandle(hPara); DeregisterDevice(hDevice); CloseHandle(hDevice); MessageBox(NULL,_T("Fin application PARA_APP"), _T("PARA_APP"),MB_OK); return 0; } // Fin de l’application CE4.2 Journées académiques Microsoft 2005

Téléchargement du noyau et de l’application sur la cible Ligne ethernet Adresse IP de l’hôte Cible CEPC Carte réseau locale 1 Carte réseau locale 192.168.0.100 Non en DHCP Pas de DNS Passerelle vue par défaut Câble Ethernet croisé PC hôte Carte Locale 2 192.168.0.1. Netgear Port parallèle Journées Académiques 2005 CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Conclusion CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Cours disponible Version V1.0 www.esiee.fr/~callotj www.msdnaa.net/search/advancedsearch.aspx CE4.2 Journées académiques Microsoft 2005

Développements en cours Cible Dragon Ball Mx21 Portage CE5.0 Applications vidéo Réalisation d’une maquette pédagogique CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 iMX21 CE4.2 Journées académiques Microsoft 2005

Journées académiques Microsoft 2005 Questions CE4.2 Journées académiques Microsoft 2005