OS Trampoline - Utilisation des ticks et counter
Bonjour,
Nous sommes étudiants en informatique, pour l'avancement de notre projet nous devons calculer le temps que prend notre algorithme A* sur un système embarqué (noyaux OSEK/VDX), ce post s'adresse essentiellement au personne connaissant l'OS trampoline.
Dans un premier nous calculons juste le temps d'execution d'un petit algo simple.
Voici notre programme qui est lancé par l'OS au démarrage (la partie importante correspondant à la tache définit dans le fichier oil) :
lonely.c :
- Code: Tout sélectionner
....
TASK(periodicTask)
{
AlarmType alarm1;
TickType avant;
TickType apres;
StatusType erreur;
int nbci_tps = 0;
int nbci_avt = 0;
int nbci_apr = 0;
TickType tempsEcoule;
TickType tempsEcouleMoyen;
int i = 0;
int j = 0;
while ( i < 1000000 )
{
erreur = GetAlarm(alarm1,&avant);
nbci_avt = nb_chiffres(avant);
putString("valeur de avant : ");
putInt((int)avant,nbci_avt);
putString("\n");
if ( erreur == E_OS_NOFUNC )
{
putString("Alarm non utilisé");
} else {
if ( erreur == E_OS_ID )
{
putString("Alarm invalide");
} else {
while(j < 10000){
j = j + 1;
}
}
}
erreur = GetAlarm(alarm1,&apres);
tempsEcoule += apres-avant;
putString("\n");
nbci_apr = nb_chiffres(apres);
putString("valeur de apres : ");
putInt((int)apres,nbci_apr);
putString("\n");
i = i + 1;
}
TerminateTask();
}
...
Le fichier oil (partie importante avec les Alarm, counter etc..) :
- Code: Tout sélectionner
....
TASK periodicTask {
PRIORITY = 1;
AUTOSTART = FALSE;
ACTIVATION = 1;
SCHEDULE = FULL;
};
COUNTER SystemCounter {
SOURCE = it_timer1; //see target.cfg
MAXALLOWEDVALUE = 2000;
TICKSPERBASE = 10; //10 ms.
MINCYCLE = 1;
};
ALARM Alarm1{
COUNTER = SystemCounter;
ACTION = ACTIVATETASK {
TASK = periodicTask;
};
AUTOSTART = TRUE {
ALARMTIME = 100; //first activation in 1s after StartOS
CYCLETIME = 50; //period 0.5s
APPMODE = std;
};
};
....
Un déroulement typique après avoir démarré l'OS est :
avant : 50
apres : 47
avant : 45
apres : 43
...
apres : 2
avant : 50
apres : 47
Alors voila, nous recherchons des explications sur l'utilisation des ticks dans notre programme lonely.c, il semblerait qu'au bout des 50 ticks il repassent à 50 et ainsi de suite, seulement si nous executons un programme qui prend plus de 50 ticks alors nous ne savons pas combien de fois ces ticks sont repassés à 50 ?
Il semblerait qu'il y ai un "counter" qui serait lié à cela, mais nous ne savons pas trop comment récupérer ce résultat et l'utiliser ?
En gros on voudrait des explications sur les ticks et counter ? La différence ? Et comment pourrions nous calculer l'execution d'un programme en prenant en compte le retour à 50 des ticks ?
J'entends bien que mon post n'est pas très clair, étant moi même un peu dans le flou, nous avons consulté la doc (en anglais) mais assez difficile à comprendre, si quelqu'un est assez calé au niveau de l'OS trampoline et de OSEK/VDX peut-être aura-t-il compris nos interrogations ?
PS: ici c'est 50 ticks mais cette valeur peut changer selon le fichier oil.