繁体   English   中英

Windows串行端口计时?

[英]Windows serial port timing?

我需要测量串行端口上字符事件之间的时间,最好是在Windows 7下。
我曾在不同的地方阅读,语句,如“Windows将不会提供超过10ms更高的分辨率”,但我一直没能找出什么是真正的意思。
是操作系统无法准确地传送事件,还是计时功能(用于测量)曾经是“差”的问题? (我在想GetTickCount)

如果是后者,那么我想我应该可以使用QueryPerformanceCounter之类的东西来进行足够的测量,但是如果事件的传递精度不高,那显然没有帮助。

我认为10毫秒的时间归因于任务切换。 即使您的计时应用程序是唯一正在运行的用户任务,仍然有很多系统任务可能会被接通。

最重要的是,我猜测从端口上接收字符到接收DataReceived事件(或所需的任何软件通知)之间的时间是高度可变的。 UART芯片可能不会中断CPU,直到感觉到为止(通常在其FIFO已满或某些超时到期时),然后内核可能决定花一些时间才能将中断信息发送到您的应用程序。 因此,即使您可以在软件中使用高分辨率计时器,也可能会受到硬件/内核级别可变性的支配。

秒表可以用来获得更高的计时分辨率。 这在System.Diagnostics中,并且它的Elapsed字段(Timespan)的分辨率为100纳秒(我希望这足够准确!)。 我使用C ++ Builder并经常在代码中输入以下内容:

#include <Diagnostics.hpp>

TStopwatch SW;
TTimeSpan TS;
SW = TStopwatch::StartNew();
// Do something we need timed here ...
SW.Stop();
TS = SW.Elapsed;
Caption="That took "+String(TS.Minutes)+" Minutes, "+String(TS.Seconds)+" Seconds."+String(TS.Milliseconds)+" mS.";

有关更多信息,这是有关此的MSDN页面的链接:

https://msdn.microsoft.com/zh-CN/library/system.diagnostics.stopwatch(VS.110).aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM