Il y a actuellement 204 visiteurs
Jeudi 18 Avril 2024
accueilactualitésdossierscomparer les prixtélécharger gratuitement vos logicielsoffres d'emploiforum informatique
Connexion
Créer un compte

Etudiant-IUT-INFO

Ce membre n'a pas encore choisi d'avatar
Visiteur
Visiteur
Nom d'utilisateur:
Etudiant-IUT-INFO
Groupes:

Contacter Etudiant-IUT-INFO

Statistiques de l’utilisateur

Inscription:
16 Fév 2012 15:02
Dernière visite:
16 Fév 2012 16:29
Messages:
1 (0.00% de tous les messages / 0.00 messages par jour)
Forum le plus actif:
Forum Linux et systèmes d'exploitation libres
(1 Message / 100.00% des messages de l'utilisateur)
Sujet le plus actif:
OS Trampoline - Utilisation des ticks et counter
(1 Message / 100.00% des messages de l'utilisateur)

Les derniers messages de Etudiant-IUT-INFO

Message 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.



.: Nous contacter :: Flux RSS :: Données personnelles :.