PCI-Express tijdstempelbron die in Windows kan worden gebruikt?

Ik moet nauwkeurige tijdmetingen doen en ik moet toegang hebben tot een betaalbare/goedkope en ietwat betrouwbaardere tijdstempel/tijdbron dan wat er in Windows/CPU is ingebouwd.

Ik moet de tijdstempelwaarden van Windows lezen.

Kan iemand wat hints geven over wat hij moet gebruiken om een ​​betere tijdstempel te krijgen?

Ik neem aan dat er een PCI-Express-gebaseerde hardwaretimerkaart is?

Ik heb geen superhoge nauwkeurigheid nodig, maar een resolutie rond de 100ns zou goed zijn.

1
@ user316 Als u de kaart wilt aansluiten op de PCI-E-poort, bent u op de juiste plek, maar voor mij klinkt het alsof u iets van de plank wilt kopen. Kan je verduidelijken? Er zijn veel problemen rondom dit, inclusief het feit dat je een besturingssysteem wilt gebruiken dat jitter heeft inherent aan het ontwerp voor iets dat weinig tot geen jitter vereist. U zult waarschijnlijk het grootste deel van de verwerking in uw eigen real-time omgeving moeten doen en de resultaten dan gewoon rapporteren aan Windows. Het is het beste om uit te leggen wat je aan het doen bent.
toegevoegd de auteur Binarytales, de bron
@ user316 Ik neem een ​​deel terug van wat ik zei over klinken alsof je het gewoon wilt kopen. Je vraag klonk als deze, maar opmerkingen niet.
toegevoegd de auteur Binarytales, de bron
toegevoegd de auteur Annan, de bron
Ik weet dat dit een elektronicasite is, maar wat ik zoek is een betaalbare hardwareklokbron die me een redelijk nauwkeurige tijdstempel kan geven. De ingebouwde "stopwatch" in Windows/CPU is gekoppeld aan de CPU-frequentie, maar de frequentie van de CPU kan variëren als gevolg van throttling of turboboost-functies, wat betekent dat het onmogelijk zal zijn om de werkelijke huidige frequentie van die teller te achterhalen. Dus waar ik naar op zoek ben, is een hardware-oplossing om me een tijdstempel te geven met een vaste frequentie die ik als referentie kan hebben. Dat ik gemakkelijk kan aansluiten op een computer. (PCI-expressie?)
toegevoegd de auteur Glitteringstar, de bron
Dus eigenlijk heb ik een vaste 5-10MHz hardware 32-64 bit teller nodig die ik kan peilen vanuit Windows, met een behoorlijke stabiliteit/toleance/drift. Een kwartskristal zou voldoende zijn. Ik neem ook aan dat een PCI/PCI-Express-implementatie de juiste manier is om dit te implementeren, omdat USB/firewire een beetje te ondeterministisch is?
toegevoegd de auteur Glitteringstar, de bron
Ik implementeer hier geen real-time besturingssysteem, maar ik heb een nauwkeurige tijdstempel nodig met een om op te nemen wanneer verschillende gebeurtenissen plaatsvinden.
toegevoegd de auteur Glitteringstar, de bron
"resolutie rond 100ns" is geen nauwkeurige specificatie. Wil je iets met <100ns/second drift? Iets dat één keer per 100ns tikt? De relevante parameters zijn frequentiestabiliteit, frequentietolerantie en frequentiedrift.
toegevoegd de auteur Orangecrush, de bron
Deze site gaat ook over het ontwerpen van elektronica - we kunnen u helpen bij het configureren van een toolchain of een schematisch capture-programma uitwerken, maar onze zustersite, stackoverflow , is de plaats waar je naartoe moet gaan om erachter te komen hoe je dit vanuit Windows kunt openen. Ik zal eraan toevoegen dat het niet gemakkelijk zal zijn; bekijk de uitstekende vragen die Ben heeft gekoppeld voor meer informatie over dit probleem, en kijk naar real-time besturingssystemen die nodig zijn om elke tijdstempelbron te gebruiken.
toegevoegd de auteur Orangecrush, de bron
@Ben - Voor de duidelijkheid, user316 is geen Bob AFAIK.
toegevoegd de auteur Orangecrush, de bron
@user: kijk ook eens naar Steve Dispensa's commentaar hier: microsoft.com /whdc/resources/MVP/xtremeMVP_hw.mspx#EU
toegevoegd de auteur Orangecrush, de bron
toegevoegd de auteur Ben Voigt, de bron

1 antwoord

Heeft uw doelcomputer een High Precision Event Timer (HPET) ? Dit lijkt te werken, de resolutie voldoet aan uw vereisten en ze komen vaak voor op recente hardware. Is er een reden waarom je het niet kunt gebruiken?

Als je iets leest van Windows, zou ik op mijn hoede zijn voor de precisie die je krijgt. Aangezien Windows geen garantie biedt wanneer een thread de tijd uitvoert tussen het lezen van de HPET (of een andere tijdstempelbron) en de tijd die het terugkeert niet-deterministisch is. Uw tijdbron zal waarschijnlijk meer gedetailleerdheid bieden dan u op betrouwbare wijze kunt verkrijgen wanneer de planner in de weg zit.

1
toegevoegd
Waarom ik twijfel over de HPET of QueryPerformanceCounter is dat volgens de documentatie het zegt: "Op een computer met meerdere processoren zou het niet uit moeten maken welke processor wordt aangeroepen, maar je kunt verschillende resultaten op verschillende processors krijgen door bugs in de basisinvoer/uitvoersysteem (BIOS) of de hardware-abstractielaag (HAL). ". Dus om de juistheid van verschillende timer-implementaties te verifiëren, zou het nuttig zijn om een ​​externe bekende timerbron te hebben, misschien in de vorm van een PCI-express-kaart?
toegevoegd de auteur Glitteringstar, de bron
Kijkend naar de uiterst relevante StackOverflow-vraag weerspiegelen de antwoorden hetzelfde sentiment. De HAL en scheduler zijn nog steeds problemen als u een PCI-E-bron gebruikt. De twijfel over HAL zal er zijn zolang je Windows gebruikt, en als je de affiniteit van je timing-thread op één CPU instelt, kun je BIOS-bugs vermijden. Ik denk echt dat het de beste manier is om alles te doen wat je kunt om de fout die je uit de HPET haalt te minimaliseren. Het zal op zijn minst goedkoper zijn.
toegevoegd de auteur user3179580, de bron
Maar door tweemaal snel achter elkaar te lezen, kunt u bepalen of Windows uw discussie heeft omgewisseld. Ik zou me meer zorgen maken over de contextschakelaars tussen het optreden van de gebeurtenis die u wilt timestampen en een leesbewerking van de HPET, dan tussen de HPET-toegang en de terugkeer van de timer-API.
toegevoegd de auteur Ben Voigt, de bron