Merci beaucoup pour ce complément d'information. Je pense que ce serait une
bonne idée de le mettre sur le wiki d'Aversive, comme documentation du
module scheduler.

Antoine

Le 20 avril 2009 21:55, Olivier MATZ <z...@droids-corp.org> a écrit :

> Salut Antoine,
>
> > Encore un message aujourd'hui (oui je sais ca fait beaucoup), mais j'ai
> > pas mal de problème pour comprendre comment utiliser proprement le
> > module base/scheduler avec le timer 0. Je ne comprend pas comment on
> > fait pour qu'une tache s'exécute à un moment donné. J'ai regardé le code
> > de test fourni, mais j'ai pas mal de peine à comprendre.
>
> Le fichier .h sert de référence pour l'interface:
>
> http://cvs.droids-corp.org/cgi-bin/viewcvs.cgi/aversive/modules/base/scheduler/scheduler.h?revision=1.13&view=markup
>
> En gros, lorsque l'option CONFIG_MODULE_SCHEDULER_TIMER0
> est levée, il n'y a rien d'autre à faire que:
>  - scheduler_init()
>  - sei()
>  - scheduler_add_event(...)
>
> Tu trouveras d'autres exemples sur la documentation de
> notre asservissement, ou dans le code du robot 2009:
>
> http://wiki.droids-corp.org/mediawiki/index.php/Aversive/Asservissement_Microb_2008
>
> http://cvs.droids-corp.org/cgi-bin/viewcvs.cgi/aversive_projects/microb2009/
>
> Sinon voilà un copier/coller d'un mail que j'ai envoyé récemment
> en point à point pour expliquer le scheduler. Je ne sais pas
> si ça répond particulièrement à ta question, mais je pense
> que ça permettra déjà de bien comprendre quel est le but de
> ce module:
>
>
> En gros, voilà en quelques points ce que fournit ce module, qui
> s'apparente plus à une gestion de timer qu'un "scheduler" au
> sens OS du terme:
>  - appel d'une fonction périodique
>  - appel d'une fonction unique dans un certain temps
>  - gestion de priorités
>  - ajout/suppression dynamique, quel que soit le contexte
>    (même dans un autre évènement)
>
> L'architecture du module est relativement simple: on se sert
> d'une interruption timer (dans aversive, il y a plusieurs options
> pour faire ça) pour appeler une fonction de management du
> scheduler. C'est là qu'on va appeler les fonctions de callback
> des évènements ajoutés. Lorsqu'un évènement est en train d'être
> éxecuté, les interruptions doivent être autorisées pour permettre
> l'execution de scheduler_interrupt(), qui peut décider qu'un
> nouvel évènement doit interrompre le courant.
>
> Les règles sont les suivantes:
>
>  1- si plusieurs tâches doivent être exécutées au même
>    moment, alors elles sont placées dans une liste et
>    sont exécutées dans l'ordre, selon leur priorité.
>
>  2- une tâche de priorité p ne peut être interrompue que par
>    une tâche de priorité strictement supérieure.
>
>  3- si une tâche est en cours d'éxecution et a une priorité
>    supérieure à toutes les autres tâches, il faut attendre
>    que cette tâche termine (retour de fonction) pour qu'une
>    autre tâche puisse être exécuté. Pendant ce temps, les
>    autre tâches sont retardées.
>
>  4- il n'y a pas de "famine": si on reprend l'exemple juste au
>    dessus: lorsque la tâche de haute priorité termine, alors
>    au prochain appel de scheduler_interrupt(), toutes les
>    tâches seront appelées (dans l'ordre, voir 1-). Celà signifie
>    que même si les tâches durent plus longtemps que le temps
>    CPU disponible, alors le scheduler fera au mieux pour
>    appeler toutes les tâches.
>
>  5- le module respecte probablement certains aspects "temps réel":
>    le temps pour     exécuter la tâche la plus prioritaire pourrait
>    être borné (selon le temps d'éxecution de scheduler_interrupt(),
>    des autres interruptions, et du temps max pdt lequel les
>    interruptions sont vérouillées dans le programme principal).
>    Pour les tâches de priorité plus faible, il faut y ajouter la
>    possibilité de se faire interrompre par les tâches de prio plus
>    élevée.
>
>
> Olivier
>
> _______________________________________________
> Avr-list mailing list
> Avr-list@droids-corp.org
> CVSWEB : http://cvsweb.droids-corp.org/cgi-bin/viewcvs.cgi/aversive
> WIKI : http://wiki.droids-corp.org/index.php/Aversive
> DOXYGEN : http://zer0.droids-corp.org/doxygen_aversive/html/
> BUGZILLA : http://bugzilla.droids-corp.org
> COMMIT LOGS : http://zer0.droids-corp.org/aversive_commitlog
>
_______________________________________________
Avr-list mailing list
Avr-list@droids-corp.org
CVSWEB : http://cvsweb.droids-corp.org/cgi-bin/viewcvs.cgi/aversive
WIKI : http://wiki.droids-corp.org/index.php/Aversive
DOXYGEN : http://zer0.droids-corp.org/doxygen_aversive/html/
BUGZILLA : http://bugzilla.droids-corp.org
COMMIT LOGS : http://zer0.droids-corp.org/aversive_commitlog

Répondre à