Changes between Version 66 and Version 67 of Archi-1-TP9


Ignore:
Timestamp:
Dec 4, 2020, 7:55:12 AM (4 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TP9

    v66 v67  
    254254'''''''''''''''
    255255}}}
    256 1. Comment définir une macro instruction du processeur uniquement si elle n'est pas définie ? Ecrivez un exemple.
     2561. Comment définir une macro instruction du processeur uniquement si elle n'est pas définie ? Écrivez un exemple.
    257257{{{#!protected ------------------------------------------------------------------------------------
    258258'''''''''''''''
     
    268268{{{#!protected ------------------------------------------------------------------------------------
    269269'''''''''''''''
    270 *
    271 '''''''''''''''
    272 }}}
    273 1. Supposons que la structure `tty_s` est définie comme suit et les registres du `TTY0` sont accessibles par la variable `struct tty_s __tty_regs_map[]`. Écrivez une fonction C bloquante qui attend un caractère tapé au clavier. Nous vous rappelons qu'il faut attendre que le registre `TTY_STATUS` soit différent de 0 avant de lire `TTY_READ`.
    274 {{{#!protected ------------------------------------------------------------------------------------
    275 '''''''''''''''
    276 *
    277 '''''''''''''''
    278 }}}
     270* En utilisant ce que nous venons de voir dans la question précédente. Si vous définissez une macro différente au début de chaque fichier `.h` (en utilisant le nom du fichier comme nom de macro pour éviter les collision  de nom) et que vous nous commencer tester que cette variable n'est pas définie comme condition d'inclusion.
     271{{{#!c
     272————————————————————— debut du fichier filename.h
     273#ifndef _FILENAME_H_
     274#define _FILENAME_H_
     275
     276[... contenu du fichier ...]
     277
     278#endif
     279————————————————————— fichier de fichier filename.h
     280}}}
     281'''''''''''''''
     282}}}
     2831. Supposons que la structure `tty_s` et le tableau de registres de `TTY` soient définis comme suit. Écrivez une fonction C `int getchar(void)` bloquante qui attend un caractère tapé au clavier sur le `TTY0`. Nous vous rappelons qu'il faut attendre que le registre `TTY_STATUS` soit différent de 0 avant de lire `TTY_READ`.
     284
     285{{{#!c
     286struct tty_s {
     287    int write;          // tty's output address
     288    int status;         // tty's status address something to read if not null)
     289    int read;           // tty's input address
     290    int unused;         // unused address
     291};
     292extern volatile struct tty_s __tty_regs_map[NTTYS];
     293}}}
     294{{{#!protected ------------------------------------------------------------------------------------
     295'''''''''''''''
     296{{{#!c
     297int getchar(void)
     298{
     299   while (__tty_regs_map[0].status == 0);
     300   return __tty_regs_map[0].read;
     301}
     302}}}
     303'''''''''''''''
     304}}}
     305
    279306
    280307== A3. Chaîne de compilation
    281308
    282309
     310Pour obj
    2833111. Le fichier « ldscript » décrit l'espace d'adressage et la manière de remplir les sections dans le programme exectutable. Quelle étape dans la chaîne de compilation a besoin de cette description ?
    284312 Les variables déclarées externes ne sont évidemment pas mise dans la section `.data` du fichier objet en sortie et les appel au fonction sont codés par des `jal ?` puisque le code des fonctions n'est pas là. Ce sera ré