INFORMATIQUE INDUSTRIELLE TR 1. 1
0. Préambule INFORMATIQUE INDUSTRIELLE : INFORMATIQUE AVEC CONTRAINTE DE TEMPS INFORMATIQUE AVEC PERIPHERIQUES D E/S INFORMATIQUE AVEC CONTRAINTE DE TEMPS Intervention sur le langage de programmation Le langage assembleur. Intervention sur le système d exploitation Fonctionnement multitâche. Processus Processus P3 Processus P2 Processus P1 Temps Inactif (en sommeil, attente) Actif Changement de contexte (sauvegarde des registres...) TR 1. 2
Intervention sur l architecture de la machine Machine parallèle. Processus Processus P3 Processus P2 Processus P1 Temps Inactif (en sommeil, attente) Actif INFORMATIQUE AVEC PERIPHERIQUES D E/S Ordinateur Adresse physique des ports d'e/s Programme Driver Carte Contrôleur de périphérique de périphérique CAN CNA Périphérique analogique Adresse physique des ports d'e/s Périphérique numérique Programme Driver de périphérique Carte Contrôleur de périphérique TR 1. 3
Plan du Cours INFORMATIQUE INDUSTRIELLE (II) + REGULATION (RI) COURS + TP AEMBLEUR 80x86-Pentium 1. ARCHITECTURE DU 80x86-Pentium 2. SOUS-PROGRAMMES AEMBLEUR SYSTEMES TEMPS REEL 3. SYSTEMES TEMPS RÉEL (TR) PERIPHERIQUES : INTERFACES d E/S / FILTRAGE 4. TUTORIAL LabWindows/CVI 5. LE PIO 8255 (Interface parallèle) 6. L UART 8250 (Interface série) 7. FILTRAGE NUMERIQUE TEMPS DIFFERE REGULATION 1. SIMULATION 2. CONTRÔLE d un processus électrique 3. CONTRÔLE d un processus électromécanique 4Annexe.CONTRÔLE d un processus thermique SYSTEMES A P - ROBOTIQUE (sous réserve). SYSTEMES à P. ROBOTIQUE PROJET. PROJET TR 1. 4
Contrôle des connaissances Projet (II ou RI) + TP. Projet TP 1 si travail satisfaisant, -1 sinon 0 si travail moyen. Note globale TP = +2 si tous TPs OK. Note d Informatique Industrielle Note Projet + Note globale de TP. Bibliographie [5] H. Nussbaumer «Informatique Industrielle II» PPR [8] A. Schiper «Programmation concurrente» PPR [10] D. Tschirhart «Commande en Temps Réel» Dunod [11] P. Wratil/R. Schmidt «Contrôle mesure régulation sur PC» Radio TR 1. 5
1. ASM 80x86-Pentium : Architecture Mémoire BUS (16 bits) { Unité d'interface ES CS FS GS Registres 16 bits Queue d'instructions 5 4 3 2 1 Système de contrôle BUS (32 bits) { Unité d'exécution EBX EDX EBP EDI EIP EAX ECX ESP ESI EFL Registres 32 bits Registre 16 bits UAL FLAGS TR 1. 6
2. Registres du 80x86-Pentium AX (2 Octets) EAX 4 Octets (32 bits) EBX ECX EDX AH AL 1 Octet (8 bits) BX BH BL BASE CX CH CL COUNT DX DH DL DATA ACCUMULATOR }Registres généraux ESP 4 Octets EBP ESI EDI SP BP SI DI (2 Octets) STACK POINTER } Registres pointeurs BASE POINTER SOURCE INDEX } Registres index DESTINATION INDEX CS (2 Octets) CODE SEGMENT DATA SEGMENT ES FS STACK SEGMENT EXTRA SEGMENT }Registres de segment GS EIP (4 Octets) INSTRUCTION POINTER Registre Compteur de programme EFL O D I T S Z A P C FLAGS Registre des indicateurs TR 1. 7
3. La segmentation REGISTRES MICROPROCEEUR CS ES Les segments peuvent être :. disjoints. recouverts. partiellement recouverts MEMOIRE RAM Adresse la plus basse CODE DONNEES PILE EXTRA Adresse la plus haute Segmentation de la mémoire centrale ( RAM) TR 1. 8
Adressage physique Adresse physique sur bus 32 bits : 2 parties :. une partie segment, notée SEGMENT sur 16 bits. une partie offset par rapport au segment SEGMENT, notée OFFSET sur 32 bits. Au total : Adresse = SEGMENT:OFFSET Calcul de l adrese physique : 15 0 Registre segment (16 bits) + 31 0 Registre offset (32 bits) = 35 0 Adresse physique (36 bits) Adresse = SEGMENT * 16 + OFFSET TR 1. 9
Modes d adressage Adresse effective MEMOIRE (EBP) (EBX) (ESI) (EDI) (EBP) + MEMOIRE (EBX) + MEMOIRE (ESI) + MEMOIRE (EDI) + MEMOIRE (EBP) + (ESI) (EBP) + (EDI) (EBX) + (ESI) (EBX) + (EDI) (EBP) + (ESI) + MEMOIRE (EBP) + (EDI) + MEMOIRE (EBX) + (ESI) + MEMOIRE (EBX) + (EDI) + MEMOIRE (EIP) (ESP) (EDI) Par rapport au segment Interdit CS ES 4. Le registre des indicateurs (FLAGS) (4 Octets) O D I T S Z A P C FLAGS TR 1. 10
5. Rangement mémoire La mémoire est indexée octet par octet. Ex. : int TOTO = 256 (Décimal) = 00 00 01 00 (Hexadécimal) Adresse mémoire (offset) (indexée octet par octet) : Donnée 00000000 : 00 00000001 : 01 00000002 : 00 00000003 : 00 6. Implantation de la pile en RAM. Squelette d un programme assembleur sous Visual C++. Pile (= LIFO).Ordres de manipulation de pile : PUSH (empilement) et POP (dépilement)..le pointeur de pile (Stack Pointer) SP : repère la position courante du sommet de la pile. 4 champs constituent une instruction assembleur : 1. Champ étiquette 2. Champ instruction 3. Champ opérande 4. Champ commentaire Exemple : Empilement de(ax), puis dépilement dans le registre BX. Supposons : (ESP) = 0064FDE4 avant manipulation de la pile TR 1. 11
// Squelette d'un pgm assembleur pour Visual C++ // Exemple de manipulation de la pile #include <stdio.h> void main() { // Partie C Les déclarations des données de l'asm se font dans la partie C short int Toto = 255; // Toto = 255 Décimal = 00 FF Hexa unsigned char Titi; printf("\n Toto = % d", (int) Toto); // Partie assembleur Minuscules et majuscules indifférentes asm { mov ax, Toto // Toto -> AX : (AX) = 255 = 00 FF EtatPile#1 push ax // Empilement de (AX) : (AX) (AX) EtatPile#2 label: pop bx // Depilement dans BX : (BX) = 00 FF EtatPile#3 mov Titi, bl // (BL) -> Titi : Titi = 255 = FF } // Partie C printf("\n Titi = % d\n", (int) Titi); } Etat de la pile : 0064FDE4 0064FDE3 0064FDE2 (ESP)+2 (ESP)+1 (ESP) (ESP)-1 (ESP)-2 EtatPile#1 PUSH AX (ESP) EtatPile#2 00 FF POP BX (ESP) EtatPile#3 Résultat de l exécution Toto = 255 Titi = 255 TR 1. 12
7. Jeu d instructions (instructions principales) INSTRUCTIONS DE TRANSFERT INSTRUCTIONS SYSTEME MOV PUSH POP XCHG XLAT LEA L LES IN OUT LAHF SAHF PUSHF POPF INSTRUCTIONS LOGIQUES SHL SAL SHR SAR ROL RCL ROR RCR NOT TEST AND OR XOR CMP CBW CWD INSTRUCTIONS DE TEST et BRANCHEMENT CALL RET JMP J?? JN? LOOP LOOPE LOOPNE JCXZ REP REPE REPNE INT INTO IRET HLT WAIT ESC LOCK STC STD STI CLC CLD CLI CMC NOP INSTRUCTIONS ARITHMETIQUES ADD ADC INC AAA DAA SUB SBB DEC AAS DAS DIV IDIV AAD MUL IMUL AAM NEG SUFFIXES A, G E B, L C Z O P S INSTRUCTIONS DE CHAÎNES CMPS SCAS LO STOS MOVS TR 1. 13
9. Exemple de pgm : calcul du maximum d un vecteur #include <stdio.h> char VECT[5]; char RES; char Chaine; int MaxElemVect; void main (void) { int NbElem = 5; VECT[0] = 2; VECT[1] = 3; VECT[2] = 1; VECT[3] = 7; VECT[4] = 0; // Debut de la partie assembleur asm { MOV ECX, NbElem ; (ECX)=NbElem DEC ECX MOV ESI, 0 ; i := 0 MOV AL, VECT[ESI] ; (AL) = MAX = VECT[0] INC ESI ; i := 1 NEXT: MOV AH, VECT[ESI] ; (AH) = VECT[i] CMP AL, AH JGE SUP ; MAX >= VECT[i]? MOV AL, AH ; MAX < VECT[i] (AL) = VECT[i] SUP: INC ESI ; MAX >= VECT[i] i = i + 1 LOOP NEXT ; (ECX) = (ECX) - 1 MOV RES, AL ; (AL) RES } // Fin de la partie assembleur MaxElemVect = RES; printf ("\nelement maximum du vecteur = %d\n\n", MaxElemVect); } TR 1. 14
TR 1. 15