| 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 | }}} |
| | 283 | 1. 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 |
| | 286 | struct 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 | }; |
| | 292 | extern volatile struct tty_s __tty_regs_map[NTTYS]; |
| | 293 | }}} |
| | 294 | {{{#!protected ------------------------------------------------------------------------------------ |
| | 295 | ''''''''''''''' |
| | 296 | {{{#!c |
| | 297 | int getchar(void) |
| | 298 | { |
| | 299 | while (__tty_regs_map[0].status == 0); |
| | 300 | return __tty_regs_map[0].read; |
| | 301 | } |
| | 302 | }}} |
| | 303 | ''''''''''''''' |
| | 304 | }}} |
| | 305 | |