Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Journées académiques Microsoft 2005
Cours Windows CE CE4.2 Journées académiques Microsoft 2005
2
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
3
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
4
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
5
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
6
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
7
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
8
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
9
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
10
É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
11
É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
12
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
13
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
14
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
15
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
16
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
17
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
18
Journées académiques Microsoft 2005
Cible STPC CE4.2 Journées académiques Microsoft 2005
19
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
20
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
21
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
22
Génération de plate-forme
Exemple Génération de plate-forme CE4.2 Journées académiques Microsoft 2005
23
Journées académiques Microsoft 2005
File→New Platform CE4.2 Journées académiques Microsoft 2005
24
Accueil de l’assistant : → Next
CE4.2 Journées académiques Microsoft 2005
25
Journées académiques Microsoft 2005
BSP→Emulator: X86 CE4.2 Journées académiques Microsoft 2005
26
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
27
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
28
Choix : type et nom de plate-forme
CE4.2 Journées académiques Microsoft 2005
29
Choix des options de plate-forme
CE4.2 Journées académiques Microsoft 2005
30
Journées académiques Microsoft 2005
Choix du réseau CE4.2 Journées académiques Microsoft 2005
31
Journées académiques Microsoft 2005
Fin : →Finish CE4.2 Journées académiques Microsoft 2005
32
Configuration obtenue
CE4.2 Journées académiques Microsoft 2005
33
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
34
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
35
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
36
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
37
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
38
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
39
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
40
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
41
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
42
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
43
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
44
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
45
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
46
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
47
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
48
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 et du 8259 CE4.2 Journées académiques Microsoft 2005
49
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
50
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
51
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
52
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
53
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
54
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
55
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
56
Problème des trains Michel DUPLESSY
DEBOGGAGE Problème des trains Michel DUPLESSY CE4.2 Journées académiques Microsoft 2005
57
Threads et synchronisation
CE4.2 Journées académiques Microsoft 2005
58
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
59
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
60
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
61
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
62
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
63
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
64
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
65
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
66
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
67
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
68
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
69
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
70
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
71
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
72
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
73
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
74
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
75
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
76
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
77
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
78
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
79
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
80
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
81
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
82
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
83
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
84
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
85
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
86
Résultat On a un peu triché avec les accents CE4.2
Journées académiques Microsoft 2005
87
Plate-forme de travail
CE4.2 Journées académiques Microsoft 2005
88
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
89
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
90
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
91
Démarrage de Remote Kernel Tracker
CE4.2 Journées académiques Microsoft 2005
92
Accepter le choix par défaut : OK
Journées académiques Microsoft 2005
93
Début de Remote Kernel Tracker
CE4.2 Journées académiques Microsoft 2005
94
Exemple de visualisation
Menus… Échelle de temps Info Bulle Fenêtre de visualisation Threads Légende CE4.2 Journées académiques Microsoft 2005
95
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
96
Positionnement du curseur
Click gauche CE4.2 Journées académiques Microsoft 2005
97
Positionnement du marqueur 1
Ouverture du menu par un click droit CE4.2 Journées académiques Microsoft 2005
98
Positionnement du marqueur 2
Curseur déplacé CE4.2 Journées académiques Microsoft 2005
99
Mesure du temps entre marqueurs
Écart visualisé par une hachure Écart mesuré numériquement CE4.2 Journées académiques Microsoft 2005
100
Journées académiques Microsoft 2005
Démarrage des threads CE4.2 Journées académiques Microsoft 2005
101
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
102
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
103
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
104
Action directe sur les threads
Ouverture du menu par click droit sur le nom du thread CE4.2 Journées académiques Microsoft 2005
105
Circulation des trains suivants
CE4.2 Journées académiques Microsoft 2005
106
Arrivée du dernier train
CE4.2 Journées académiques Microsoft 2005
107
Journées académiques Microsoft 2005
Fin du programme Attente du getchar() CE4.2 Journées académiques Microsoft 2005
108
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
109
Commande de LCD Liliane PIEDFORT
DRIVER Port Parallèle Commande de LCD Liliane PIEDFORT CE4.2 Journées académiques Microsoft 2005
110
EXEMPLE DE DRIVER PORT PARALLELE
Commande d’un module d’affichage LCD CE4.2 Journées académiques Microsoft 2005
111
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
112
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
113
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
114
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
115
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
116
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
117
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
118
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
119
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
120
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 valide l’introduction des données dans les registres CE4.2 Journées académiques Microsoft 2005
121
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
122
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 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 x x 0 (RS=0 E=1) Retour à l’état de repos commande x x 1 (RS=0 E=0) CE4.2 Journées académiques Microsoft 2005
123
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 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 x x 0 (RS=1 E=1) Retour à l’état de repos commande x x 1 (RS=1 E=0) CE4.2 Journées académiques Microsoft 2005
124
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 = 0x «DATA» RS=1 E=0 Entrée de la commande dans DR %0100 = 0x «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
125
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
126
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
127
Instructions pour le LCD (1)
Clear Display: 0x01 Return Home: 0x02 Entry Mode Set: 0x04 à 0x07 (% 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
128
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
129
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
130
Timing à respecter après Power On
CE4.2 Journées académiques Microsoft 2005
131
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
132
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
133
Journées académiques Microsoft 2005
Notion de driver CE4.2 Journées académiques Microsoft 2005
134
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
135
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
136
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
137
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
138
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
139
Driver de gestion du LCD
CE4.2 Journées académiques Microsoft 2005
140
Journées académiques Microsoft 2005
PARA.def CE4.2 Journées académiques Microsoft 2005
141
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
142
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
143
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
144
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
145
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
146
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
147
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
148
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
149
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
150
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
151
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
152
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
153
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
154
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
155
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
156
Journées académiques Microsoft 2005
Driver (16) *pdwActualOut = 1; return bRet; } // Fin du Driver LCD CE4.2 Journées académiques Microsoft 2005
157
Application LCD Écriture d’un message sur 2 lignes
CE4.2 Journées académiques Microsoft 2005
158
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
159
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
160
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 = " "; unsigned int i; CE4.2 Journées académiques Microsoft 2005
161
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
162
Journées académiques Microsoft 2005
Application (5) // Ouverture du driver hPara = CreateFile(TEXT("PAR1:"),GENERIC_WRITE, ,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
163
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
164
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
165
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
166
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 Non en DHCP Pas de DNS Passerelle vue par défaut Câble Ethernet croisé PC hôte Carte Locale 2 Netgear Port parallèle Journées Académiques 2005 CE4.2 Journées académiques Microsoft 2005
167
Journées académiques Microsoft 2005
Conclusion CE4.2 Journées académiques Microsoft 2005
168
Journées académiques Microsoft 2005
Cours disponible Version V1.0 CE4.2 Journées académiques Microsoft 2005
169
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
170
Journées académiques Microsoft 2005
iMX21 CE4.2 Journées académiques Microsoft 2005
171
Journées académiques Microsoft 2005
Questions CE4.2 Journées académiques Microsoft 2005
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.