Re: [Avr-list] Problème de compréhension du module scheduler
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
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
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
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
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
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
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