我正在使用通过USB连接的GPS鼠标/接收器(创建虚拟COM端口)来确定计算机时间漂移。 GPS鼠标以NMEA消息的形式发送PPS事件我希望获得每个消息的精确时间戳,以便我可以计算GPS时间和计算机时间之间的差异。
收到邮件后立即获取时间戳的最佳方法是什么。我试过轮询串口和数据接收事件。现在我的代码看起来像这样:
Seq.unfold (fun (a,i) ->
let a' =
if i % 2 = 0
then a*2
else a+1
Some (a', (a',i+1)))
(1,1)
|> Seq.append [1]
我已尝试使用Stopwatch的DateTime.Now.Ticks,但差异的噪音是20ms左右。我见过的纸张精度/精度达到了1ms。有谁知道我做错了什么?
答案 0 :(得分:0)
DateTime将有抖动,记录在案:
此属性的分辨率取决于系统计时器,即 在Windows系统上大约15毫秒
StopWatch实际上是多媒体计时器的包装器,是Windows平台上最准确的计时器,但它们不提供绝对时间。它们以特定频率给出刻度,知道你可以将它转换为时间。问题是,滴答声是从启动时开始的滴答,与系统时间无关。
旁注:这取决于你想要的准确程度。不要忘记接收消息的硬件和读取.NET串行类中的字节有一定的延迟。与“硬实时”相比,延迟可能很大。哪个.NET不适合。