Anne Universitaire : 2012/2013
COMPTE RENDU N2 ATELIER STRE
16/11/2012 Objectifs
- Faire clignoter une diode LED avec le noya Picos 18
- Prempter deux tches.
Ministre de l'Enseignement et de la Recherche
Scientifique
Direction Gnrale des Etudes Technologiques
Institut Suprieur des Etudes Technologiques de
Djerba
Compte rendu N2 atelier STRE
Travail ralis par : Besrour Mohamed Safouan et Yahyaoui Imed L3SEM Page 1
1. Pour crer un projet MPLAB avec le noyau temps rel Picos 18, on poursuit les tapes indiqu dans le compte rendu prcdente (Voir compte rendu sur le lien suivant : http://youtu.be/nlr9YNJsiEE?hd=1
2.
Cette photo reprsente ltape 2 de ce TP, cest lemplacement dun point darrt (break point) sur la ligne
en face de linstruction while (1).
Compte rendu N2 atelier STRE
Page 2
3.
Dans cette tape on veut changer ltat du tache0 de READY (prt) ltat suspendu (SUSPENDED)
NB : ce changement aura lieu dans la ligne 148 du fichier taskdesc.c
Aprs cette modification une le noyau na aucune tche excuter et donc dans la simulation sarrte au
niveau de la ligne 26 du fichier Picos18i.c.
4.
TASK(TASK0) { TRISBbits.TRISB4 = 0; LATBbits.LATB4=1 ; SetRelAlarm(ALARM_TSK0,1000,10); while(1) { WaitEvent(ALARM_EVENT); ClearEvent(ALARM_EVENT); LATBbits.LATB4=~LATBbits.LATB4 ; } }
Compte rendu N2 atelier STRE
Travail ralis par : Besrour Mohamed Safouan et Yahyaoui Imed L3SEM Page 3
Ce code permet de faire clignoter une diode led dans une seule tache.
Simulation de la tache 0 avec ISIS
5.
Pour programmer le pic on utilise le picdem2plus (limage prcdente) et le MPLAB
Compte rendu N2 atelier STRE
Page 4
- Debugger select Tools None
- Programmer Select Program MPLAB ICD2
Compte rendu N2 atelier STRE
Travail ralis par : Besrour Mohamed Safouan et Yahyaoui Imed L3SEM Page 5
6.
Pour ajouter une nouvelle tche il faut suivre les tapes suivantes.
Ajouter un fichier tsk_task1.c sous la rpertoire MyApp (Figure 1).
Edit Proprietes
Compte rendu N2 atelier STRE
Page 6
C File Types
Cocher Line Numbers (Pour afficher le nombre de chaque ligne).
Compte rendu N2 atelier STRE
Travail ralis par : Besrour Mohamed Safouan et Yahyaoui Imed L3SEM Page 7
Dclarer le TASK1 avec la mme syntaxe de TSCK0 (ce changement aura lieu la ligne 129 de
fichier taskdesc.c
Dfinir le TASK1 sous la TASK0 (ce changement aura lieu la ligne 156 jusqu la ligne 166 de
fichier taskdesc.c
Compte rendu N2 atelier STRE
Page 8
Dans le fichier define.h, il faut dclarer lidentifient de chaque tche ajoute et la leur priorit.
7.
Compte rendu N2 atelier STRE
Travail ralis par : Besrour Mohamed Safouan et Yahyaoui Imed L3SEM Page 9
8. NB1: Pour Simuler il faut dclarer les ports, donc il faut suivre les tapes suivantes :
View Watch
Add SFR (port)
NB2 : Pour assurer le bon fonction de simulation il est prfrable de dsactiver Watch dog , donc il faut
suivre ces tapes :
Configure Configure Bits
Compte rendu N2 atelier STRE
Page 10
Watchdog Timer Disabled
Lors de la simulation dans la question numro 8 la simulation reste dans le TASK0 car le programme reste
dans la boucle while (1).
Donc il faut ajouter une instruction qui permet le dplacement entre la tche 0 et la tche 1.
Compte rendu N2 atelier STRE
Travail ralis par : Besrour Mohamed Safouan et Yahyaoui Imed L3SEM Page 11
9.
Pour savoir si la priorit est dfini par le trie ascendant ou le trie descendant, on veut permuter la valeur
de la priorit de chaque tache dans le fichier define.h.
Aprs la simulation on constate que la tche qui possde le nombre plus grand de priorit sera la tche
prioritaire donc pour garder la priorit la tache 1 il faut changer leur priorit avec un nombre suprieur
la priorit de la tache 2
10.
Lorsquon attribue les mmes valeurs de priorit pour les deux tache on constate que le noyau choisi la
TASK0 sans tenir compte de lidentificateur, cest--dire que ce choix est alatoire.
Compte rendu N2 atelier STRE
Page 12
11.
Dans cette solution on utilise deux tache lun pour allumer la diode et lautre pour lteindre.
Cette solution utilise la fonction TerminateTask () qui permet de faire passer ltat d une tche de
RUNNING SYSPENDED. La tche nest plus alors considre par le noyau. Pour lexcuter de nouveau il
est ncessaire de lactiver laide de la fonction ActivateTask.
Dans notre cas le bouclage se fait par le pic car aprs TerminateTask () de tsk_task1.c le pic de r
excute le fichier ds le dbut dans le clignotement sera continuer.
Compte rendu N2 atelier STRE
Travail ralis par : Besrour Mohamed Safouan et Yahyaoui Imed L3SEM Page 13
12. Dans la deuxime solution on a utilis Set Event (Task ID, Task Event) , Set Event permet dactiver une autre
tche , donc on peut faire un boucle avec le programme grce cette fonction.