2009-06-23 14 views
1

Est-il possible de dormir pendant une durée qui sera précise à moins de 100 microsecondes sur Windows CE? Le moins de gigue est le mieux - idéalement, nous aimerions des temps de réponse de microsecondes à un chiffre. Ce que nous voulons vraiment, c'est une minuterie de 5 ms avec une instabilité très faible - bien que les API Windows CE WaitFor [Single | Multiple] et Sleep fonctionnent en unités de millisecondes, nous ne pouvons pas corriger le temps sous-ms. code peut prendre pour courir, de sorte que le cycle dérive progressivement.<100uS précise dort sur Windows CE

Si cela n'est pas possible, cette information serait également très utile.

Répondre

2

This MSDN article a du code pour configurer une interruption timer 500us dans WinCE, donc c'est absolument possible. Si vous n'êtes pas bloqué dans votre version de WinCE, vous pouvez regarder dans Tenasys, qui prétend offrir un RTOS fonctionnant côte à côte avec Windows sur le matériel standard.

J'ai aussi entendu de bonnes choses à propos de QNX, mais je n'ai pas utilisé leurs produits non plus. Cependant, je ne crois pas que ce soit compatible avec Windows.

+0

Nous ne sommes pas vraiment enfermés dans un système d'exploitation spécifique tant que nous pouvons interagir avec une certaine bibliothèque de fournisseurs en temps différé (qui a une version CE, et une version régulière de Windows qui fonctionne sur le vin). Toutefois, les coûts d'octroi de licences sont une source de préoccupation, de sorte qu'il n'est pas souhaitable de mettre en place un RTOS tiers en plus des coûts de licence Windows. Y a-t-il quelque chose de plus facile que de pirater la minuterie comme ça, ou est-ce le meilleur que nous aurons? – bdonlan

+0

Ce lien était juste le résultat d'un peu googling sommaire.Je ne suis pas assez familier avec Windows CE pour vous donner une réponse confiante sur la difficulté de mettre en place des minuteurs à haute résolution de toute autre manière. –

1

Ce n'est pas possible. Ce n'est même pas possible sur les ordinateurs de bureau. Les systèmes d'exploitation typiques ne fonctionnent tout simplement pas de cette manière.

Si ce dont vous avez besoin est quelque chose à tirer précisément toutes les 4 millisecondes ou ce que vous avez de la chance. Si ce dont vous avez vraiment besoin, c'est quelque chose à tirer exactement 250 fois par seconde, ce qui peut être plus faisable. Si vous avez besoin de ce dernier, je peux suggérer une approche.

+0

Cela ne semble pas correct. L'espacement standard entre les paquets audio VoIP est de 20 ms (loi U/A) et aucun logiciel de bureau n'a de problèmes de manipulation; ou des serveurs générant des centaines de flux audio de cette façon. (avec la gigue à <1ms) Oui - "précisément" 4ms n'est pas faisable. Mais avec une instabilité sensible allant jusqu'à 0,5 ms, la configuration devrait être assez normale, surtout si un seul de ces flux est nécessaire. – viraptor

+0

Je ne suis pas sûr de ce que les paquets audio VoIP doivent faire avec un timing précis. Une carte réseau n'interroge pas les données arrivant sur le réseau, elle les prend telles quelles et les place dans un tampon jusqu'à ce que la CPU interroge les données. –

0

Pour corriger la gigue, vous devez avoir accès à une minuterie haute résolution. La CPU que vous avez peut en avoir une. Sinon, le contrôleur d'interruption peut. Le moyen le plus simple est d'utiliser un Linux avec temps réel et WINE votre chemin dans cette bibliothèque. vous voulez un fil périodique.

Take a look at this report from NIST.

1

Si votre besoin de sommeil n'est pas une batterie/problème fil rendement et juste une question de timing précis, vous pouvez utiliser le « PerformanceCounter » dans les périphériques Windows CE. Sur les processeurs XScale et Qualcomm, il s'agit du temporisateur de puce interne et sa granularité est inférieure à 1 ms. Sur les anciens processeurs OMAP et Samsung, l'API performancecounter passe par le tick du système 1ms et a beaucoup de gigue.

L.B.