Documents personnels et calculatrice autorisés.
Durée totale de l'épreuve : 2h. L'examen comporte deux parties (cette partie Programmation et la partie réseau de Mr Rohrbacher), d'égale importance. Vous êtes maîtres de votre organisation du temps, mais veuillez composer les deux sujets sur des copies différentes. N'oubliez pas qu'en ne traitant qu'une seule des deux parties, vous ne pourrez au mieux obtenir que la moyenne.
Le positionnent axial de la culasse dans le testeur est effectué par le vérin poussoir. Mais son positionnement radial est en fait défini par sa position sur le tapis roulant, et évidement la position d'arrêt du tapis. Pour éviter d'additionner deux incertitudes de positionnement, on envisage de mesurer directement l'avancement de la culasse, à l'aide d'un capteur spécifique. Ce sera donc en fonction des indications de ce capteur que l'on commandera le moteur du tapis.
Question 1 : Ce capteur donne la position de la culasse en binaire réfléchi. Que peut-on en conclure sur la nature de l'information donnée par ce capteur ?
Question 2 : Comme précisé dans la documentation, la MSX-BOX se programme en C, sous Linux. Les positions de la culasses doivent donc être gérées en C, qui ne gère les nombres qu'en binaire «normal». Il faudra donc utiliser une fonction, ou au moins un morceau de programme, qui traduise la valeur (en binaire réfléchi) donnée par le capteur en son équivalant en binaire pur. Ecrivez ce bout de programme (je préfère évidemment que ce soit sous forme d'une fonction). Vous pouvez expliquer en quelques mots la méthode que vous utilisez pour cette conversion.
Question 3 : Pour lire un port 16 bits, sous Linux, on peut utiliser une fonction nommée inw qui nécessite un argument entier (le numéro de port), et qui retourne un entier long : la valeur lue sur le port. Le capteur est relié au port d'adresse 200 (en hexa), mais sur les bits de poids fort. Le capteur délivre une valeur entre 0 et 2047 (là je parle en décimal, mais comme dit plus haut il la donne en réalité en binaire réfléchi). Ecrivez le petit programme en C qui lise la valeur du capteur, force à 0 les bits non utilisés par le port, puis réalise les décalages permettant d'obtenir un arrangement normal de la valeur, c'est à dire avec tous les bits utiles du côté des bits de poids faible, les bits de poids fort non utilisés étant mis à 0. Votre programme se limitera à afficher la valeur obtenue, en hexadécimal.
Question 4 : La lecture par la MSX BOX est évidemment beaucoup plus rapide que la culasse ne peut se déplacer. Afin de ne pas prendre en compte de valeurs parasites, que faut-il modifier dans le programme précédent pour qu'il attende d'acquérir successivement trois fois la même valeur pour afficher cette mesure.
Question 5 : Soient X et Y valant en hexadécimal X=CAFE et Y=COCA. Traduisez X et Y en binaire (expliquez rapidement comment vous faites) puis posez la soustraction (en binaire) Z=X-Y (je veux voir les retenues, du moins les non nulles), puis traduisez Z en hexadécimal.
Question 6 : Soit T valant 32 en décimal. Traduisez T en binaire. Posez (obligatoirement) la division (en binaire) U=Z / T, en continuant après la virgule. Que vaut U en décimal ? Que vaut U en hexadécimal ?
Question 7 : Pouvait-on trouver U sans poser la division ?
barème approximatif de cette partie (sur 20) : 2/4/4/3/3/3/1
Patrick
TRAU, ULP - IPST
mars 05