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 | |