timer 1ms

Le
J-F Portala
Bonjour,
je souhaiterais avoir un timer à la milliseconde.(sous windows XP)
Le but est d'aller lire à plusieurs adresses des valeurs analogiques
(numérisees par une carte dédiée (pilote uniquement sous windows).)
J'ai essayé dans un thread de mettre sleep(1), mais la temporisation
correspondante est autour de 10ms.

J'ai la solution d'utiliser soit un timer qui me déclenche un evenement et à
ce moment je vais lire les adresses,
soit une temporistation dans une boucle pour éviter de bloquer la CPU.(si je
vais lire sans arrêt aux adresses)

Merci de vos suggestions
Jeff
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Michael DOUBEZ
Le #1884240
Bonjour,
je souhaiterais avoir un timer à la milliseconde.(sous windows XP)
Le but est d'aller lire à plusieurs adresses des valeurs analogiques
(numérisees par une carte dédiée (pilote uniquement sous windows).)
J'ai essayé dans un thread de mettre sleep(1), mais la temporisation
correspondante est autour de 10ms.

J'ai la solution d'utiliser soit un timer qui me déclenche un evenement et à
ce moment je vais lire les adresses,
soit une temporistation dans une boucle pour éviter de bloquer la CPU.(si je
vais lire sans arrêt aux adresses)

Merci de vos suggestions
Jeff



Est ce qu'il n'y aurait pas usleep aussi ou nanosleep() (je sais pas si
c'est POSIX) ?

Sinon, certain utilisent select (ou l'équivalent sous XP) pour faire des
timers.

Michael

diablo
Le #1885570
Bonjour,
je souhaiterais avoir un timer à la milliseconde.(sous windows XP)
Le but est d'aller lire à plusieurs adresses des valeurs analogiques
(numérisees par une carte dédiée (pilote uniquement sous windows).)
J'ai essayé dans un thread de mettre sleep(1), mais la temporisation
correspondante est autour de 10ms.

J'ai la solution d'utiliser soit un timer qui me déclenche un evenement et à
ce moment je vais lire les adresses,
soit une temporistation dans une boucle pour éviter de bloquer la CPU.(si je
vais lire sans arrêt aux adresses)

Merci de vos suggestions
Jeff




un timer à 1ms ne sera jamais précis à 1ms, selon moi ...

--
-uTb#`diablo PWed by GNU/Linux Debian on Diablo

Frederic Lachasse
Le #1917680
J-F Portala wrote:
Bonjour,
je souhaiterais avoir un timer à la milliseconde.(sous windows XP)
Le but est d'aller lire à plusieurs adresses des valeurs analogiques
(numérisees par une carte dédiée (pilote uniquement sous windows).)
J'ai essayé dans un thread de mettre sleep(1), mais la temporisation
correspondante est autour de 10ms.

J'ai la solution d'utiliser soit un timer qui me déclenche un evenement et à
ce moment je vais lire les adresses,
soit une temporistation dans une boucle pour éviter de bloquer la CPU.(si je
vais lire sans arrêt aux adresses)


Voir les API multimédia de Windows:

timeBeginPeriod
timeEndPeriod
timeGetDevCaps
timeGetSystemTime
timeGetTime
timeKillEvent
TimeProc
timeSetEvent

Et pour plus de précision dans le calcul de temps:
QueryPerformanceCounter
QueryPerformanceFrequency

--
Frédéric Lachasse - ECP86

Pierre Maurette
Le #1922442
Bonjour,
je souhaiterais avoir un timer à la milliseconde.(sous windows XP)
Le but est d'aller lire à plusieurs adresses des valeurs analogiques
(numérisees par une carte dédiée (pilote uniquement sous windows).)
J'ai essayé dans un thread de mettre sleep(1), mais la temporisation
correspondante est autour de 10ms.


Et de toutes façons, le thread est *à priori* dans son propre temps, et
n'existe pas dans dans certaines périodes du vrai temps.

J'ai la solution d'utiliser soit un timer qui me déclenche un evenement et à
ce moment je vais lire les adresses,
soit une temporistation dans une boucle pour éviter de bloquer la CPU.(si je
vais lire sans arrêt aux adresses)


Je vais certainement écrire des conneries, ça fait un moment que je
n'ai pas fait du bas niveau sous XP. Mais si ça peut vous servir...
XP standard (je ne connais pas embedded, par exemple) n'est pas un OS
temps réel. On peut lire le temps machine et le temps processus sans
problème, mais il est impossible simplement de générer des intervalles.
J'avais il y a longtemps fait des tests sous C++ Builder ou Delphi,
c'est pareil pour ce qui nous intéresse. Le timer VCL était calamiteux,
la fenêtre était si je me souviens bien de 30ms, à l'époque des
horloges de l'ordre de 0,5 à 1,5 GHz. En diminuant la consigne du timer
puis en bouclant sur RDTSC dans un thread, on arrivait à s'en sortir,
au prix d'une charge processeur temporaire donc acceptable. Mais même
en jouant sur la priorité - aucune influence, d'ailleurs - on ne
pouvait se prémunir avec certitude de la prise de contrôle du noyau.
Il existe peut-être des solutions dans les API, il est possible
d'écrire un driver, mais on casse alors ce qui fait l'intérêt de XP. Et
une machine XP dédiée à un seul contrôle hard, c'est débile.
La solution normale est à mon avis de déléguer à la périphérie la
gestion de l'interface entre le temps réel et l'asynchrone. C'est
élégant et confortable, vous gérez facilement à haut niveau (presque)
autant d'interface acquisition - actionneur - etc. - que vous le
souhaitez.
Si vous avez une carte du commerce adaptée à une période de mesure
inférieure ou égale à la milliseconde, et qu'elle est dédiée à XP, la
solution devrait se trouver dans sa documentation.
Si la carte est développée en interne, c'est à elle de gérer le temps
réel et ensuite sérialiser les échantillons.
Dans le cas qui n'est certainement pas le vôtre d'un périphérique
d'acquisition sur une liaiason série ou autre, il est sans doute
rentable d'intercaler un microcontrôleur - PIC par exemple - entre le
pécé et le boîtier.

--
Pierre Maurette

Sylvain SF
Le #1922441
J-F Portala wrote on 28/03/2008 11:03:
Bonjour,
je souhaiterais avoir un timer à la milliseconde.(sous windows XP)
Le but est d'aller lire à plusieurs adresses des valeurs analogiques
(numérisees par une carte dédiée (pilote uniquement sous windows).)


et cette care dédiée (de quelle marque et quelle nature ?) ne propose
pas l'envoi bufferisé de ces valeurs selon un timer hard qui lui est
propre ? (bcp de cartes NI feraient ça).

Sylvain.

selys
Le #1922440
J-F Portala wrote:
Bonjour,
je souhaiterais avoir un timer à la milliseconde.(sous windows XP)


Spécifique OS.
Voir sur fr.comp.os.ms-windows.programmation
où ça a été discuté des dizaines de fois.

Publicité
Poster une réponse
Anonyme