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)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Michael DOUBEZ
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
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.
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
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
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
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
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)
Et pour plus de précision dans le calcul de temps: QueryPerformanceCounter QueryPerformanceFrequency
-- Frédéric Lachasse - ECP86
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)
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)
Et pour plus de précision dans le calcul de temps: QueryPerformanceCounter QueryPerformanceFrequency
-- Frédéric Lachasse - ECP86
Pierre Maurette
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
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.
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
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.
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).
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
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.
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.