Changes between Version 12 and Version 13 of IOC20_T01
- Timestamp:
- Jan 30, 2020, 6:43:02 AM (5 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
IOC20_T01
v12 v13 10 10 * Connexion à un système distant par ssh / scp. 11 11 * Manipulation directe des GPIO d'une !RaspberryPi en mode utilisateur. 12 * Écriture d’une librairie C pour la manipulation des GPIO. 13 * Ecriture d'une application multi-threadées simple. 12 * Ecriture d'application multi-threadées simples. 14 13 15 14 Vous écrirez un **compte-rendu au format markdown** (CR), dans lequel vous répondrez aux quelques questions du TME, vous mettrez les étapes de réalisation du TP, ainsi vous conserverez une trace et vous ajouterez tout ou partie de vos codes commentés (succinctement mais proprement). Les compte-rendus de TP doivent être suffisamment explicites pour que vous puissiez les réutiliser plus tard. Par exemple, vous allez devoir lire des documents externes et vous devrez référencer ces documents (mettre les liens) pour les retrouver. En fonction de vos connaissances de départ, vous pourrez être plus ou moins explicite sur tel ou tel point. … … 23 22 24 23 25 = 2. Hello World! !RaspberryPi 1 26 27 28 29 == 2.1. Accès aux cartes !RaspberryPi 24 = 2. Hello World! !RaspberryPi 25 30 26 31 27 … … 58 54 59 55 60 == 2.2. Configuration des clés ssh 56 = 3. Configuration des clés ssh 57 61 58 62 59 … … 75 72 76 73 77 == 2.3. Prise en mains des outils de développement: Hello World! 74 75 = 4. Prise en mains des outils de développement: Hello World! 76 78 77 79 78 … … 139 138 * Exécuter le programme. 140 139 141 == 2.3. Contrôle de GPIO en sortie == 140 141 142 = 5. Contrôle de GPIO en sortie == 143 144 142 145 143 146 [[Image(htdocs:png/Raspberry-Pi-GPIO-Layout-Revision-2.png,500px,nolink)]] … … 164 167 1. Que fait la fonction `delay()` ? 165 168 166 == 2.4. Contrôle de plusieurs GPIO en mode "sortie" == 169 170 171 = 6. Contrôle de plusieurs GPIO en mode "sortie" == 172 173 167 174 168 175 Vous allez maintenant faire clignoter deux leds à des fréquences différentes et paramétrables sur la ligne de commande. Pour tous les exercices ci-après, vous devez changer votre Makefile en ajoutant les programmes à compiler. … … 172 179 173 180 174 == 2.5. Lecture de la valeur d'une entrée GPIO == 181 182 = 7. Lecture de la valeur d'une entrée GPIO == 183 184 175 185 176 186 Maintenant que vous maîtrisez le contrôle d'un GPIO en sortie, passons au mode "entrée". 177 187 178 188 * Écrivez un programme `read_bp.c` qui configure la GPIO 18 en entrée (là où est connecté le bouton poussoir) et qui affiche la valeur de ce GPIO dans une boucle infinie. 179 * On veut maintenant détecter l'appui sur le bouton poussoir. Pour cela reprenez le programme `blink01_pt.c` et faite une copie en `blink01_bp_pt.c`. Dans un pthread, vous allez lire la valeur du bouton périodiquement toutes les 20ms. L'appui ou le relâchement est présent quand deux valeurs lues successivement sont différentes. Quand le bouton n'est pas enfoncé, la valeur de la pin est à 1. La structure du programme suggéré. 189 * On veut maintenant détecter l'appui sur le bouton poussoir. Pour cela reprenez le programme `blink01_pt.c` et faite une copie en `blink01_bp_pt.c`. Dans un pthread, vous allez lire la valeur du bouton périodiquement toutes les 20ms. L'appui ou le relâchement est présent quand deux valeurs lues successivement sont différentes. Quand le bouton n'est pas enfoncé, la valeur de la pin est à 1. La structure du programme suggéré. Commencer par tester que vous savez détecter l'appui sans gérer les LEDs. 180 190 {{{#!c 181 191 val_prec = 1 … … 195 205 comportement quand un relachement est detecte 196 206 }}} 197 Commencer par tester que vous savez détecter l'appui sans gérer les LEDs. 198 199 Ensuite, faite un programme qui fait clignoter deux fois plus vite les LEDs lorsqu'on appuit sur le bouton une fois, et qui refait clignoter les LEDs normalement au nouvel appui. 200 201 == 2.5. Réalisation d'une petite librairie == 202 203 Écrire les fonctions suivantes et fabriquer une fonction libgpio.a. 204 Vous devez vous même, définir les prototypes des fonctions et écrire le Makefile pour fabriquer une library et linker votre programme avec. Si vous avez des difficultés, Google existe :-)) ! 205 206 Indications : Une bibliothèque de fonction est en principe une archive de fichiers objet (.o). Dans notre cas, c'est un peu particulier, nous n'auront qu'un seul fichier objet à l'intérieur. 207 Cette bibliothèque reçoit l'adresse de base physique des registres GPIO. 208 Elle utilise des variables globale statique (local au fichier) pour stocker des états (file descriptor par exemple). 209 210 * `int gpio_init(void)` 211 - Ouverture et mapping 212 - L'adresse de base des registres GPIO dans l'espace d'adressage physique est supposée connue, mais nous verrons que l'on peut savoir où se trouve les GPIO en lisant des variables exposées par le noyau. 213 - Rend 0 si pas d'erreur; -1 en cas d'erreur. 214 215 * `int gpio_setup (int gpio, int direction)` 216 - Setup des broches en INPUT ou OUTPUT 217 - `gpio` : un numéro de broche légal 218 - `direction` : 0 = INPUT, 1 = OUTPUT 219 - Rend 0 si pas d'erreur; -1 en cas d'erreur. 220 221 * `int gpio_read (int gpio, int * val)` 222 - Lecture d'une broche 223 - `gpio` : un numéro de broche légal 224 - `* val` : pointeur vers un buffer qui contiendra la valeur lue 225 - Rend 0 si pas d'erreur; -1 en cas d'erreur 226 227 * `int gpio_write (int gpio, int val)` : écriture d'une broche 228 - Ecriture d'une broche 229 - `gpio` : un numéro de broche légal 230 - `val` : valeur à écrire 231 - Rend 0 si pas d'erreur; -1 en cas d'erreur 232 233 207 * Ensuite, modifier le programme pour faire fonctionner la led0 en télérupteur (un appui changer l'état de la led) alors que la led1 continue de clignoter périodiquement. 208 209