Re: [Avr-list] Problème de compréhension du module scheduler

2009-04-20 Par sujet Olivier MATZ
Antoine albertelli wrote:
> Donc 1/SCHEDULER_UNIT indique le nombre de tick avant la prochaine
> exécution de la fonction, c'est bien ça ? Comme 1 us = 10ms, je
> comprend mieux maintenant. Merci !

C'est bien ça !

___
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


Re: [Avr-list] Problème de compréhension du module scheduler

2009-04-20 Par sujet Antoine albertelli
Donc 1/SCHEDULER_UNIT indique le nombre de tick avant la prochaine
exécution de la fonction, c'est bien ça ? Comme 1 us = 10ms, je comprend
mieux maintenant. Merci !

Antoine

Le 20 avril 2009 22:15, Olivier MATZ  a écrit :

>
> Antoine albertelli wrote:
> > Encore une question : A quoi correspond par exemple 1L /
> > SCHEDULER_UNIT ? J'ai vu que ca correspond à 10ms et que SCHEDULER_UNIT
> > vaut 512, mais ca ne m'aide pas trop...
>
> SCHEDULER_UNIT est le nombre de microsecondes entre chaque appel
> à scheduler_interrupt(). C'est l'unité de base du scheduler (parfois
> appelé le tick), et donc le période minimale pour un événement
> périodique.
>
> Cette valeur dépend de la configuration des timers. Plus cette valeur
> est petite, plus le scheduler est précis, mais plus il consomme de
> temps CPU. Pour un uC à 16 Mhz, 512 est une valeur relativement
> moyenne.
>
> 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

Re: [Avr-list] Problème de compréhension du module scheduler

2009-04-20 Par sujet Olivier MATZ

Antoine albertelli wrote:
> Encore une question : A quoi correspond par exemple 1L /
> SCHEDULER_UNIT ? J'ai vu que ca correspond à 10ms et que SCHEDULER_UNIT
> vaut 512, mais ca ne m'aide pas trop...

SCHEDULER_UNIT est le nombre de microsecondes entre chaque appel
à scheduler_interrupt(). C'est l'unité de base du scheduler (parfois
appelé le tick), et donc le période minimale pour un événement
périodique.

Cette valeur dépend de la configuration des timers. Plus cette valeur
est petite, plus le scheduler est précis, mais plus il consomme de
temps CPU. Pour un uC à 16 Mhz, 512 est une valeur relativement
moyenne.

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


Re: [Avr-list] Problème de compréhension du module scheduler

2009-04-20 Par sujet Antoine albertelli
Encore une question : A quoi correspond par exemple 1L / SCHEDULER_UNIT
? J'ai vu que ca correspond à 10ms et que SCHEDULER_UNIT vaut 512, mais ca
ne m'aide pas trop...

Antoine

Le 20 avril 2009 22:03, Olivier MATZ  a écrit :

> Antoine albertelli wrote:
> > 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.
>
> hehe, pas faux... Je mets ça dans mes todo :)
>
>
> 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

Re: [Avr-list] Problème de compréhension du module scheduler

2009-04-20 Par sujet Olivier MATZ
Antoine albertelli wrote:
> 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.

hehe, pas faux... Je mets ça dans mes todo :)


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


Re: [Avr-list] Problème de compréhension du module scheduler

2009-04-20 Par sujet Antoine albertelli
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  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

Re: [Avr-list] Problème de compréhension du module scheduler

2009-04-20 Par sujet Olivier MATZ
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