NOTE IMPORTANTE. Pour toutes les questions où il est demandé d'expliquer la réponse, une
réponse sans explication sera notée 0.
NOM : ………..……..……..………………….. PRENOM : ……………………………………..
Exercice 1. 14 points
Le problème considéré ici concerne le contrôle de feux tricolores à l'intersection d'une route
principale et d'une route secondaire très peu fréquentée.
Pour fluidifier la circulation, le principe consiste à laisser le feu au vert sur la route principale le
plus longtemps possible (et donc le feu au rouge sur la route secondaire). Les feux ne s'inver-
seront que lorsqu'un nombre minimum de voitures seront arrivées au feu rouge sur la route
secondaire, nous considérerons 12 voitures ici. Son feu restera alors au vert (et celui de la route
principale au rouge) pour un temps constant (qui a préalablement été estimé suffisant pour que
la quantité de voitures généralement présentes aient le temps de franchir le feu).
NOTE. Pour simplifier le problème, nous ne considérerons pas le passage par le feu orange.
Notre objectif serait d'utiliser la carte STM32F4 pour piloter le feu sur la route principale.
Nous allons ici seulement simuler le passage au feu vert ou rouge par l'allumage de la led
correspondante. L'évolution de l'allumage des leds se fera à la fréquence du systick.
Afin de simuler également le comptage des voitures se présentant au feu rouge sur la route
secondaire, nous utiliserons le générateur de nombres aléatoires.
Quelques rappels concernant ces périphériques, et des macros à utiliser dans les questions de
cet exercice, sont fournis en Annexe.
Le code développé ci-dessous utilisera de plus les définitions/déclarations suivantes :
// Nombre de voitures au-delà duquel le feu sur la route principale doit
// passer au rouge :
#define MAX_CAR 12
// Nombre de périodes du systick pendant feu rouge sur route principale :
#define LIMIT_RED 6
uint32_t rnd = 0; // valeur récupérée du RNG
unsigned int nb_car = 0; // nombre de voitures sur route secondaire
int green = 1; // 1 si feu vert, 0 si feu rouge sur route principale
unsigned int count_time_red = 0; // comptage des périodes au feu rouge
Q1. En utilisant les définitions fournies, définir une macro GPIO_OUT qui permet d'accéder au
contenu du registre de sortie du port GPIO auquel sont connectées les leds, comme un entier
non signé 32 bits (on rappelle que le type correspondant est uint32_t).
Réponse. 1 pt
Cf cours 1 (slides 43 à 47 + vos notes de cours) et exercice 2 du TD2 semaine 1
, Q2. Expliquer selon quelle méthode (i.e., en modifiant quoi, comment, pourquoi ?) vous
pourrez procéder à un allumage des leds qui sera caractérisé par une valeur val : val est un
entier compris entre 0 et 15, chaque bit à 1 de ce code sur 4 bits indique une led à allumer.
Réponse. 1 pt
Cf TD/TP semaine 3 (et repris encore dans les semaines suivantes), en particulier tous les
détails expliqués pas à pas dans l’exercice 2 du TD.
Q3. Recopier et compléter le code de la fonction allume_leds ci-dessous selon ce que vous
avez conçu aux questions 2 et 1.
void allume_leds (uint16_t val) {
// compléter
}
Réponse. 1 pt
Idem, cf TD/TP semaine 3 (et repris encore dans les semaines suivantes), en particulier tous
les détails expliqués pas à pas dans l’exercice 2 du TD.
Comme indiqué précédemment, nous allons maintenant simuler le passage au feu vert ou
rouge sur la route principale par l'allumage de la led correspondante.
Afin de simuler le comptage des voitures se présentant au feu rouge sur la route secondaire,
nous utiliserons le générateur de nombres aléatoires en mode interruption (il est supposé
avoir été configuré en conséquence).
Q4. Expliquer comment s’appellera (pourquoi) et tout ce que fera techniquement la fonction qui
sera chargée de récupérer dans la variable globale rnd un nouveau nombre aléatoire
généré, automatiquement chaque fois qu'il est disponible (ne pas oublier qu’il faut vérifier qu'un
nouveau nombre aléatoire est bien prêt, cf Annexe).
En utilisant les définitions fournies, écrire cette fonction.
Préciser ce qui provoquera l'appel de cette fonction lorsqu’un nouveau nombre est disponible.
The benefits of buying summaries with Stuvia:
Guaranteed quality through customer reviews
Stuvia customers have reviewed more than 700,000 summaries. This how you know that you are buying the best documents.
Quick and easy check-out
You can quickly pay through credit card or Stuvia-credit for the summaries. There is no membership needed.
Focus on what matters
Your fellow students write the study notes themselves, which is why the documents are always reliable and up-to-date. This ensures you quickly get to the core!
Frequently asked questions
What do I get when I buy this document?
You get a PDF, available immediately after your purchase. The purchased document is accessible anytime, anywhere and indefinitely through your profile.
Satisfaction guarantee: how does it work?
Our satisfaction guarantee ensures that you always find a study document that suits you well. You fill out a form, and our customer service team takes care of the rest.
Who am I buying these notes from?
Stuvia is a marketplace, so you are not buying this document from us, but from seller liliaferrouk. Stuvia facilitates payment to the seller.
Will I be stuck with a subscription?
No, you only buy these notes for $9.74. You're not tied to anything after your purchase.