3
uint8_t solde ;
uint16_t RIB ; //identification bancaire
}tCompte ;
tCompte* getCompteInfo() ; // retourne NULL si l’accès au serveur de la banque n’est pas réussi.
// Sinon elle retourne l’adresse de la zone mémoire contenant les infos sur la compte.
Le déroulement de la tâche est comme suit :
- Recevoir le code secret de la tâche tAuthentification et lancer le timer.
- Pour 3 tentatives : tenter de lire le code PIN saisi (différent de NULL) et tester la confidentialité des
codes.
• Si aucune tentative n’est valide, suspendre toutes les tâches, arrêter le timer et réactiver tDefault.
• Si au moins une tentative est valide, arrêter le timer et récupérer les infos sur le compte. Envoyer
ensuite ces infos via la queue Qcompte vers la tâche tService.
III.3(0,5 pts)) Donner les codes de déclaration et de création de la queue Qcompte de taille 3.
III.4( 0,5pts)) Donner le bout de code création de cette tâche.
III.5(4 pts)) Coder cette tâche en se basant sur les BSP précédents.
IV. Tâche tService
Les services possibles pour le client du DAB sont : impression de l’extrait, lecture du solde, retrait d’un
montant et annulation. Cette tâche permet l’exécution de l’un de ces services. Si l’opération à exécuter est
annulation, on revient à la tâche tDefault après suspension de toutes les autres tâches et reset du timer.
On suppose défini le BSP suivant :
typedef enum {extrait, solde, retrait, annuler} tOper ;
uint8_t getSolde(tCompte C) ; // retourne le solde du compte C en paramètre
uint16_t getRIB(tCompte C) ; // retourne le RIB du compte C en paramètre
void updateMontant(tCompte* C, uint8_t montant) ; // met a jour le solde du compte
C suite a un retrait du montant
tOper saisirService() ; //retourne le service choisi par le client
uint8_t saisirMontant() ; // si l’opération est retrait, le client doit saisir son montant,
// cette fonction retourne le montant choisi par le client
void imprimExtrait(uint16_t RIB) ; // permet d’imprimer un extrait de compte en passant
//en paramètre le champ RIB d’une structure de type tCompte
Le déroulement de la tâche est comme suit. Recevoir les données envoyées par la tâche tPINVerif, activer
le timer, lire le service saisi par le client et éventuellement le montant si c’est un retrait. Ensuite, Rejeter la carte et
arrêter le timer. A la fin Suspendre toutes les tâches et activer tDefault à la fin.
IV.1( 0,5pts)) Donner le bout de code de création de cette tâche.
IV.2(3,5 pts)) Donner le code de cette tâche.
V. Tâche timerTask(4 pts)
Le timer expire lorsque l’accès au réseau eBank échoue pendant 10 secondes, ou l’attente de saisie a expiré
au-delà de 10 secondes. La fonction de l’ISR (void isrHandlerTmr()) active la tâche timerTask par le
moyen du sémaphore semIsrTMR qui est de même nature que celui de la question 1. Cette tâche se déclenche par
la réception du sémaphore. Elle affiche le message « problème de réseau », rejette la carte, désactive toutes les
autres tâches et réactive la tâche tDefault.
V.1(0,5 pts)) Donner les bout de codes de déclaration et de création du sémaphore.
V.2) (1,5 pts)Donner le code de la fonction de l’ISR (void isrHandlerTmr()). On suppose définie la
fonction (void isrClearFlagsPending()) qui réactive l’ISR.
V.3( 0,5pts)) donner le bout de code de création de cette tâche.
V.4( 1,5pts)) donner le code de cette tâche.