Changes between Version 3 and Version 4 of SujetTP2-2016
- Timestamp:
- Feb 3, 2016, 5:43:24 AM (9 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SujetTP2-2016
v3 v4 6 6 Lors de la dernière séance pour commander les LEDS et accéder au BP, vous avez dû mapper dans l'espace virtuel du processus utilisateur la zone de mémoire permettant l'accès aux GPIO. Pour cela, il vous fallait avoir les droits du root. Désormais, les LED et BP seront accessibles en mode utilisateur normal. 7 7 8 {{{#!div 8 9 {{{#!td 9 Nous allons donc créer un pilote pour le périphérique LED+BP.\\10 **Nous allons donc créer un pilote pour le périphérique LED+BP.**\\ 10 11 Ce pilote sera accessible dans par le pseudo-fichier `/dev/ledbpXY`\\ 11 12 '''XY''' correspond aux initiales de votre binôme pour éviter les conflits avec vos camarades\\ 12 Par exemple pour '''A'''lmada et '''F'''omentin, il faudrait créer /dev/ledbp'''AF''' 13 Par exemple, pour '''A'''lmada et '''F'''omentin, il faudrait créer /dev/ledbp'''AF''' 14 }}} 13 15 }}} 14 16 15 17 Par exemple, vous pourrez écrire un programme test (cf fichier `test.c` ci-dessous) qui accède aux LED et BP en s'exécutant entièrement en mode utilisateur. 16 18 19 {{{#!div 17 20 {{{#!td 18 Le comportement proposé ici du pilote est le suivant. 19 * Pour les LEDS, on envoie un tableau de caractères. La case `'i'` définit l'état de la LED `'i'` (`'0'` LED éteinte sinon 21 **Le comportement proposé ici du pilote est le suivant :** 22 23 Pour les LEDS:: 24 on envoie un tableau de caractères. La case `'i'` définit l'état de la LED `'i'` (`'0'` LED éteinte sinon 20 25 LED allumée). 21 * Pour les boutons, on propose un tableau de caractères. Le pilote lit l'état des boutons et met dans la case `'i'` l'état 22 du bouton `'i'`. Quand le bouton est relâché, le pilote met le caractère `'0'`, quand le bouton est enfoncé, le pilote 23 met une valeur différente de `'0'`. 26 Pour les boutons:: 27 on propose un tableau de caractères. Le pilote lit l'état des boutons et met dans la case `'i'` l'état 28 du bouton `'i'`. \\ 29 **-** Quand le bouton est relâché, le pilote met le caractère `'0'`. \\ 30 **-** Quand le bouton est enfoncé, le pilote met une valeur différente de `'0'`. 31 }}} 24 32 }}} 25 33 26 34 C'est une proposition, vous pouvez faire comme bon vous semble. Ce programme (non testé) est censé faire clignoter la led `'0'` jusqu'à ce qu'on appuie sur le bouton. 27 {{{ 35 {{{#!c 28 36 #include <stdio.h> 29 37 30 38 #define NBLED 2 31 #define NBB TN139 #define NBBP 1 32 40 char led[NBLED]; 33 char btn[NBB TN];41 char btn[NBBP]; 34 42 35 43 int main() 36 44 { 37 45 int i; 38 int fd = open("/dev/ledb tn", O_RDWR);46 int fd = open("/dev/ledbpXY", O_RDWR); 39 47 if (fd < 0) { 40 48 fprintf(stderr, "Erreur d'ouverture du pilote LED et Boutons\n"); 41 49 exit(1); 42 50 } 43 for( i = 0; i < NBLED; i ++) 51 for( i = 0; i < NBLED; i ++) { 44 52 led[i] = '0'; 53 } 45 54 do { 46 55 led[O] = (led[O] == '0') ? '1' : '0';