Changes between Version 74 and Version 75 of Archi-1-TP9


Ignore:
Timestamp:
Dec 4, 2020, 3:22:45 PM (4 years ago)
Author:
franck
Comment:

a

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TP9

    v74 v75  
    789789- Savoir comment créer un début de pilote pour le terminal `TTY`.
    790790- Savoir comment décrire une API en C
     791- Savoir appeler une fonction en assembleur depuis le C
    791792 
    792793**Fichiers**
     
    796797├── harch.c      : code dépendant de l'architecture du SoC, pour le moment c'est juste le pilote du TTY
    797798├── harch.h      : API du code dépendant de l'architecture
     799├── hcpu.h       : prototype de la fonction clock()
    798800├── hcpu.S       : code dépendant du cpu matériel en assembleur
    799801├── kernel.ld    : ldscript décrivant l'espace d'adressage pour l'éditeur de lien
     
    804806**Questions**
    805807
    806 1. ?
    807 {{{#!protected ------------------------------------------------------------------------------------
    808 '''''''''''''''
    809 -
     8081. Le code du driver du TTY est dans le fichier `harch.c` et les prototypes sont dans `harch.h`. Si vous ouvrez `harch.h` vous allez voir que seul les prototypes des fonctions `tty_read()` et `tty_write()` sont présents. La structure décrivant la carte des registres du `TTY` est déclaré dans le .c. Pourquoi avoir fait ainsi ?
     809{{{#!protected ------------------------------------------------------------------------------------
     810'''''''''''''''
     811- Le noyau n'a pas besoin de savoir comment sont organisés les registres dans le TTY. Il a juste besoin de savoir comment écrire ou lire un messages. Plus c'est cloisonné, moins il y a de risque de problèmes. En outre, cela simplifie un hypothétique portage sur une autre architecture.
     812'''''''''''''''
     813}}}
     8141. Le MIPS dispose d'un compteur de cycles internes. Ce compteur est dans un banc de registres accessibles uniquement quand le processeur fonctionne en mode `kernel`. Nous verrons ça
     815au prochain cours, mais en attendant nous allons quand même exploiter ce compteur. Pourquoi avoir mis la fonction dans `hcpu.S` ? Rappeler, pourquoi avoir mis `.globl clock`
     816{{{#!protected ------------------------------------------------------------------------------------
     817'''''''''''''''
     818* La fonction qui lit ce registre est nécessairement en assembleur, elle est donc mise dans hcpu.S.
     819* `.globl clock` permet de faire en sorte que la fonction soit visible par les autres fichier C.
    810820'''''''''''''''
    811821}}}
     
    814824**Exercices**
    815825
    816 
    817 
    818 
    819 
    820 
    821 
     826- Comme d'habitude, exécutez le code et observez.
     827- Afin de vous détendre un peu, vous allez créer un petit jeu `guess`
     828  - `guess` tire un nombre entre '0' et '9' et vous devez le deviner en faisant des propositions.\\`guess` vous dit si c'est trop grand ou trop petit.
     829 __Étapes__
     830  - Vous créez deux fichiers `guess.c` et `guess.h`.
     831    - `guess.c` contient le jeu il y au moins une fonction `guess()`
     832    - `guess.h` contient les déclarations externes de `guess.c`
     833  - `kinit()` doit lancer `guess()`
     834  - `guess()`
     835     - vous demande de taper une touche pour démarrer le jeu.
     836     - effectue un tirage d'un nombre en utilisant la fonction `clock()` et ne gardant que le chiffre de poids faible (ce n'est pas aléatoire, mais c'est mieux que rien)
     837     - exécute en boucle jusqu'à réussite
     838       - demande d'un chiffre
     839       - comparaison avec le tirage et affichage des messages `"trop grand"`, `"trop petit"` ou `"bravo"`
     840  - Vous devrez modifier le Makefile puisque vous avez un fichier à compiler en plus.
     841  - Si c'est trop facile, vous pouvez complexifier en utilisant des nombres à 2 chiffres ou plus.