NI LabVIEW,CVI,数据采集等产品讨论区

取消
显示结果 
搜索替代 
您的意思是: 

关于异步定时器定时精度

我需要用Labwindows/CVI完成一个数据采集任务,用异步定时器进行定时触发,每隔0.05s读取一次数据采集卡,并且需要这个时间间隔尽可能精确,期望精度能到正负1ms。我已经用GetAsyncTimerResolution函数测过系统的时钟分辨率是1ms。我用的系统是xp sp 2,cpu主频2.4GHz,内存512MB。我的问题是异步定时器能达到1ms的定时精度吗?如果不用硬件定时的方法,软件定时能达到这样的精度吗?先谢过了

0 项奖励
1 条消息(共 5 条)
5,564 次查看

1ms 已經是Windows 所能提供的最小時間間隔了.

If you run your program under Windows, +/- 1ms 的精確度不太可能達成,

because Windows still needs to provide CPU resource for other applications

at the same time.

If +/-1ms precision is absolutely required, try to use the function of buffer reading.

0 项奖励
2 条消息(共 5 条)
5,462 次查看
可以使用实时操作系统,能够提供微秒级的精度。
0 项奖励
3 条消息(共 5 条)
5,235 次查看

我在异步定时器回调函数中添加了如下函数,测出来的值大概都在50ms左右,最多差个1ms,在不同计算机上都试验过了。不知道这样能不算是异步定时器的定时精度?

QueryPerformanceCounter(&countstart);
QueryPerformanceFrequency(&frequent);   
   dsec = (double)timediff / (double)frequent.QuadPart;
   countend = countstart;
   if(dsec<1.0)
       printf("elapsed time :%f(second)\n",dsec);

0 项奖励
4 条消息(共 5 条)
5,198 次查看

对于软件定时来说,我们说ms级的精度,其实并不特指1ms,而是几至十几ms这样一个量级。所以如果是软件定时,您的这个应用恐怕很难满足,当然如果您程序比较简单,或许实测下来也能满足要求,但是windows系统本身不提供这个确定性。

 

如果您要使用到ms级的精度,还是要用到硬件定时。

0 项奖励
5 条消息(共 5 条)
5,187 次查看