Changes between Version 3 and Version 4 of SujetTP3-2015


Ignore:
Timestamp:
Feb 27, 2015, 10:43:50 PM (10 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SujetTP3-2015

    v3 v4  
    55L'objectif de la séance est le commander les leds et les boutons poussoir en passant par un pilote.
    66Lors de la dernière séance pour commander les leds et accéder aux boutons, vous aviez dû mapper dans l'espace virtuel de l'utilisateur la zone de mémoire permettant l'accès aux GPIO. Il vous fallait avoir les droits du root pour cela. Désormais, les LED et boutons seront accessibles en mode utilisateur.
     7
     8Nous allons donc créé un pilote pour le périphérique LED+!BoutonsPoussoir.
     9Ce pilote sera accessible dans par le pseudo-fichier `/dev/ledbtn` (noter que vous serez peut-être obligé de changer un peu le nom pour éviter les conflit avec vos camarades).
     10
     11Par exemple vous pourrez écrire cela dans un fichier `test.c` ci-dessous. Ce que fait ce programme importe peu. Ce qui est important c'est que ce programme s'exécute entièrement en mode utilisateur.
     12Le comportement proposé ici du pilote est le suivant.
     13* Pour les leds on envoie un tableau de caractère de 4 cases. La case 0 définit l'état de la de leds 0 (`'0'` led éteinte sinon led allumée).
     14* Pour les boutons, on propose un tableau de caractères de 2 cases. Le pilote lit l'état du bouton 0 et le met dans la case 0, et l'état du bouton 1 et le met dans la case 1. Quand le bouton est relaché, le pilote met le caractère `'0'`, quand le bouton est enfoncé, le pilote met la valeur `'1'`.
     15
     16C'est une proposition, vous pouvez faire comme bon vous semble.
     17{{{
     18#include <stdio.h>
     19
     20char led[4];
     21char btn[2];
     22 
     23int main()
     24{
     25   int fd = open("/dev/ledbtn", O_RDWR);
     26   if (fd < 0) {
     27      fprintf(stderr, "Erreur d'ouverture du pilote LED et Boutons\n");
     28      exit(1);
     29   }
     30   do {
     31      for ( i=0; i<4; i++) {
     32         memcpy( led, "0000", 4);
     33         led[i] = '1';
     34         write( fd, led, 4);
     35         sleep( 1);
     36      }
     37      read( fd, btn, 2);
     38   } while (btn[0] == '0');
     39   return 0;
     40}
     41}}}
     42
     43== Etapes ==
     44