IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

timer en millisecondes


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 12
    Points : 2
    Points
    2
    Par défaut timer en millisecondes
    bonjour a tous
    quelqu'un pourrait-il m'aider a mettre au point un timer d'une resolution d'1 millisecondes.

    je travaille sur os x.

    j'ai besoin d'un timer qui compte toujours de 0 a 100, seul le temps d'execution peut varier de 0,1s a 10 minutes.
    c'est parceque le temps d'execution peut etre regler a 0,1s qu'il faut une precision de l'ordre de la milliseconde.
    j'ai essayer simplement avec usleep(), mais ce n'est pas tres precis.

    est ce qu'il vaut mieux que j'utilise clock(), setitimer() ou gettimeofday() ?

    est ce qu'il faut calculer le time_now a chaque instant pour pouvoir etablir un delai?
    est ce que calculer ce time_now ne va pas me prendre trop de ressources?

    est ce qu'une resolution de 1 ms est portable (osx & windows)?

    mersi a tous de votre aide
    nicolas

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut Re: timer en millisecondes
    Citation Envoyé par sl1200mk2
    est ce qu'une resolution de 1 ms est portable (osx & windows)?
    Sous Windows, il y a une granularité de 15-16 ms pour les fonctions d'attente... (Peut-être pas en priorité "realtime", mais j'ai bien peur que si...)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    bonjour,
    donc, il ne faut pas que j'utilise usleep().

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Regarde du côté de la fonction select().
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    avez vous reussi a avoir un timer satisfaisant avec la fonction select()?
    merci

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: timer en millisecondes
    Citation Envoyé par sl1200mk2
    bonjour a tous
    quelqu'un pourrait-il m'aider a mettre au point un timer d'une resolution d'1 millisecondes.
    A moins d'avoir du matériel spécialisé et un système temps réel, c'est quasiment impossible. Si c'est la machine qui doit assurer une base de temps, il y a un problème de conception. En principe, c'est du matériel qui fait ça. Le logiciel est quasiment toujours 'à la traine'.
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sl1200mk2
    avez vous reussi a avoir un timer satisfaisant avec la fonction select()?
    La valeur d'attente programmée est un minimum. Ca peut être plus. Un ordinateur c'est pas une horloge.
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    Un ordinateur c'est pas une horloge.
    ok alors, que me conseillez vous pour avoir une base de temps interne a l'ordinateur, mais invariante.

    1s peut valoir 1,145s d'accord (par exemple)
    quelle fonction me conseillez vous pour que 1s ait toujours la meme resolution?

    merci

  9. #9
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Sinon si tu as le courage tu peux aller voir du cote des timer au niveau processeur
    Exemple ici avec un microcontroleur 16 bits Intel 80c196
    http://www.trotek.ec-lyon.fr/~muller...pteurs.html.fr

    Je sais que ca existe sous les Intel Pentium 4 mais après sous MAC je sais pas.

    C'est vraiment très précis, au niveau de la µs
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    je ne pense pas avoir les competences pour m'atteler a cette tache.

    merci pour l'info

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 22
    Points : 26
    Points
    26
    Par défaut
    c jouable sous linux avec les intérruptions sans trop de probleme.

    edit: linux = unix = os x hein quand on parle d'intérruption

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    c jouable sous linux avec les intérruptions sans trop de probleme.
    pouvez vous m'aidez avce un code de demos ?

    merci

  13. #13
    Membre régulier Avatar de gijy
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 136
    Points : 83
    Points
    83
    Par défaut
    j'ai cree un timer de 1ms sous dos en reprogrammant les registres de l'horloge RTC du PC et en deroutant l'it de celui-ci.
    je peux te passer le code C.
    il faut l'adapter à ton os que je ne connait pas.

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gijy
    j'ai cree un timer de 1ms sous dos en reprogrammant les registres de l'horloge RTC du PC et en deroutant l'it de celui-ci.
    je peux te passer le code C.
    il faut l'adapter à ton os que je ne connait pas.
    Je déconseille ce genre de manip. Un certain nombre de mécanismes internes (timeouts disques etc.) comptent sur la programmation standard (selon les specs IBM/PC) pour faire fonctionner le PC correctement. Toucher à ces mécanismes n'est pas sans risque, à moins d'être un expert en specs et archi PC.

    Heureusement, sous Unixoides et Windows NT/XP, ce genre de manip n'est pas possible en mode utilisateur.

    Enfin, on programmer toutes les interruptions 1ms que l'on veut, si l'IT est masquée au moment du tick, l'appel sera perdu (ou au moins retardé). La fiabilité est donc toute relative.

    La vrai question est "quelles sont les contraintes 'temps réel' sur le tick à 1ms ?" (précision, stabilité, facteur de forme...)
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Membre régulier Avatar de gijy
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 136
    Points : 83
    Points
    83
    Par défaut
    D'accord avec emmanuel. Il faut savoir ou l'on met les pieds; mais à m'a connaissance c'est le seul ou l'un des seul moyen d'avoir une base de temps la plus precise possible.
    Toute creation de base de temps par soft dependra de la vitesse CPU, de sa puissance code, des it hards à gerer HD floppy clavier ....
    Alors quel autre solution; sur certaine application critique il faut parfois mettre les mains dans le cambouil et prendre certains risque en toute connaissance de cause.

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    bonjour gijy, et tout le monde
    ca m`interesse que tu postes ton code c pour que sache ce qu'il en est.

    merci par avance

  17. #17
    Membre régulier Avatar de gijy
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 136
    Points : 83
    Points
    83
    Par défaut
    Pardon pour le retard mais deplacement oblige.
    ci code pour modification du timer RTC du PC sous dos.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     disable();      /* inhibe les it */
    /* installation de l'it timer necessaire au cadencement a 1ms */
    /* du pilotage de la carte d'entree sortie */
     
     oldvect70h=getvect(INT_TIMER);  /* recp de l'ancien vect d'it timer */
     outportb(0x70,0x0A); /* acces registre A */
     tampon=inportb(0x71); /* lecture reg A */
     tampon=tampon|0x26;   /* positionne le diviseur a 1ms */
     outportb(0x70,0x0A);  /* acces reg A */
     outportb(0x71,tampon); /* ecrit la bonne valeur */
     
     outportb(0x70,0x0B);  /* acces regitre d'etat B du MC146818 */
     tampon=inportb(0x71); /* lecture du registre B */
     tampon=tampon|0x40;   /* preparation du registre */
     outportb(0x70,0x0B);  /* acces regitre d'etat B du MC146818 */
     outportb(0x71,tampon);  /* demande d'it periodique */
     outportb(0x70,0x0C);    /* acces registre d'etat C */
     tampon=inportb(0x71);  /* lecture reg C */
     tampon=tampon&0xBF;  /* valide prise en compte it */
     outportb(0x70,0x0C);    /* acces registre d'etat C */
     outportb(0x71,tampon);
     
     setvect(INT_TIMER_BIOS,oldvect70h);  /* deplacement de l'ancien vecteur */
     DISABLEIR(0x08);    /* inhibe irq timer */
     setvect(INT_TIMER,Int_Timer);  /* positionnement du nouveau vecteur d'it timer */
     ENABLEIR(0x08);   /* autorise it timer */
     outportb(0xA0,0x20); /* acquitement de l'it sur le 8259A esclave */
     outportb(0x20,0x20); /* acquitement de l'it sur le 8259A maitre */
     
     enable();  /* autorise les it */
    ici Int_timer est ta fonction interrupt.
    ne pas oublier d'appeler l'it du bios dans cette fonction pour rester compatible avec l'os.
    Remettre en place le vecteur du bios lorsque tu sort de ton prog.

    salut et courage

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    hello
    c'est de l'assembleur?

    merci pour cet exemple, mais je ne pense pas arriver a en faire quelque chose.
    si qqun l'utilise dans un programme en C, j'aimerais bien savoir comment

    ++
    nicolas

  19. #19
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sl1200mk2
    c'est de l'assembleur?
    <...>
    si qqun l'utilise dans un programme en C, j'aimerais bien savoir comment
    C'est pas de l'assembleur, mais c'est du Borland C. Ce n'est pas portable pour plusieurs raisons :
    • Utilisation d'extensions Borand C (<dos.h>, disable(), enable(), getvect(), setvect(), inportb(), outportb())
    • Accès direct au matériel (possible sous DOS/Windows, interdit sous Windows NT ou Linux en mode utilisateur. Il faut un driver).
    • Contraintes matérielles (qui dit que dans ton PC, le composant RTC -- MC146818 -- soit le même)
    • Contraintes d'architecture. ce code est prévu pour PC x86 uniquement.
    Pas de Wi-Fi à la maison : CPL

  20. #20
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 12
    Points : 2
    Points
    2
    Par défaut
    emmanuel,
    merci pour tes precisions.

    je ne peux pas croire que je suis battu par mon ordi (powerbook) pour realiser un timer ou sequenceur ou clocker ....
    j'ai bien compris ce que tu m'as ecrit sur le fait qu'un ordi n'est pas un chronometre.
    n'y a t-il pas un moyen de s'en approcher?
    (pardon par avance si cela depasse le cadre de ce forum)

    peux tu m'expliquer le concept du "real-time"?
    est ce que windows/osx permettent d'acceder au real-time?

    j'utilise pour tout autre chose un programme qui s'appelle PureData, qui se veut real-time: http://crca.ucsd.edu/%7Emsp/software.html
    est ce que leur real-time est bidon?

    si je passe le temps minimum a 0.1s, aurais-je plus de chance de realiser mon timer?

    encore thanks
    nicolas

Discussions similaires

  1. Sleep ou timer en millisecondes
    Par Joe Le Mort dans le forum Langage
    Réponses: 2
    Dernier message: 08/11/2006, 15h45
  2. Timer de précision
    Par guigui dans le forum MFC
    Réponses: 1
    Dernier message: 04/12/2002, 15h21
  3. Timer en µsecondes
    Par Dagobert dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 25/11/2002, 00h59
  4. Réponses: 8
    Dernier message: 18/09/2002, 03h20
  5. [Conversions] Millisecondes...
    Par agh dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2002, 11h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo