Changes between Version 7 and Version 8 of Archi-1-TD9


Ignore:
Timestamp:
Jan 14, 2022, 3:12:51 PM (3 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TD9

    v7 v8  
    255255''
    256256}}}
    257 {{{#!comment
    258 1. Quelle est la différence entre `#include "file.h"` et `#include <file.h>` ? Quelle option du compilateur C permet de spécifier les répertoires lesquels se trouvent les fichiers include ?
    259 {{{#!protected ------------------------------------------------------------------------------------
    260 ''
    261 Cours 9 / slides 18 et 58\\\\
    262 Ce sont toujours des connaissances connues en principe, mais comme c'est utilisé dans le code, ce n'est pas inutile d'en parler rapidement.
    263 * Avec `#include "file.h"`, le préprocesseur recherche le fichier dans le répertoire local.
    264 * Avec `#include <file.h>`, le préprocesseur recherche le fichier dans les répertoires standards tel que `/usr/include` et dans les répertoires spécifiés par l'option `-I` du préprocesseur. Il peut y avoir plusieurs fois `-I` dans la commande, par exemple `-Idir1 -Idir2 -Idir3`.
    265 * C'est donc l'option `-I` qui permet de définir les répertoires de recherche.
    266 ''
    267 }}}
    268 1. Comment définir une macro-instruction C uniquement si elle n'est pas déjà définie ? Écrivez un exemple.
    269 {{{#!protected ------------------------------------------------------------------------------------
    270 ''
    271 Cours 9 / slides 9 et 58\\\\
    272 Cette déclaration est présente à plusieurs endroits dans le code. Elle permet de définir des valeurs de paramètres par défaut, s'ils ne sont pas déjà définis ailleurs, soit plus haut dans le code, ou dans un fichier inclu, ou encore passé en paramètre du compilateur par l'option `-D`.
    273 * En utilisant, une directive `#ifndef` :
    274 {{{#!c
    275 #ifndef MACRO
    276 #define MACRO
    277 #endif
    278 }}}
    279 ''
    280 }}}
    281 1. Comment être certain de ne pas inclure plusieurs fois le même fichier `.h` ?
    282 {{{#!protected ------------------------------------------------------------------------------------
    283 ''
    284 Cours 9 / slides 9 et 58\\\\
    285 C'est un usage de ce qui a été vu dans la question précédente. C'est utilisé dans tous les fichiers .h (sauf oubli).
    286 * En utilisant ce que nous venons de voir dans la question précédente : on peut définir une macro instruction différente au début de chaque fichier `.h` (en utilisant le nom du fichier comme nom de macro pour éviter les collisions de nom). On peut alors tester l'existence de cette macro comme condition d'inclusion du fichier.
    287 {{{#!c
    288 ————————————————————— debut du fichier filename.h
    289 #ifndef _FILENAME_H_
    290 #define _FILENAME_H_
    291 
    292 [... contenu du fichier ...]
    293 
    294 #endif
    295 ————————————————————— fichier de fichier filename.h
    296 }}}
    297 ''
    298 }}}
    299 }}}
    3002571. 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`. `NTTYS` est un `#define` définit dans le Makefile de compilation avec le nombre de terminaux du SoC (en utilisant l'option `-D` de gcc).
    301258{{{#!c