关于cvi计时器
本人编写一个CVI程序,每当读取一个数据后就记录以下时间。while(k<2) //k 初值为0
{
for(i=0;i<6;i++)
{
gg = ComRdByte (1); //读数
time=Timer(); //计时
}
k++;
}
当K=0时 timer中的数据是正确的。
但是当K=1 时 即执行第二遍循环时,timer中的数据就不变了,始终是一个值。
单步执行不会出现这种问题,但是一旦运行起来就会出现这种状况。
已经困扰我很久,不知道是什么原因,希望大家能不吝赐教,感激不尽。 timer()的默认精度为一毫秒(如果你设置了useDefaultTimer的配置为真的话,精度只有55毫秒!),如果for循环再1毫秒内完成,定时器根本无法分辨!而单步执行时,由于人的操作速度较慢,当然可以分辨了!
你可以在time=Timer();语句前加Delay(。。。)测试一下就知道了! 0.0
0.004
0.008
0.012
0.016
0.02
以上是我第一组数据(6个一组),以下是我第二组数据
0.071
0.071
0.071
0.071
0.071
0.071
第一组并没有问题,可到了第二组时间就不变了 嗯?怎么我前天上午就回复的帖子,时间却昨天00:54的了???
你还是看看上面的回复,提醒一下:如果第二次读串口接受缓冲区时,而缓冲区没有数据,速度会非常快,定时器的分辨率根本无法分辨! 如果串口没有数据的话程序应该会停在读数据那啊(我用的是DEBUG模式),我上次的回复里面第一组数据的时间间隔是0.04S也就说分辨率小于55ms。 本帖最后由 netcreature 于 2009-3-20 10:34 编辑
如果串口没有数据的话程序应该会停在读数据那啊(我用的是DEBUG模式),我上次的回复里面第一组数据的时间间隔是0.04S也就说分辨率小于55ms。
umd 发表于 2009-3-20 10:03 http://www.cpubbs.com/bbs/images/common/back.gif
串口缓冲区没有数据时,ComRdByte ()函数可能立即返回(这取决于超时设置)!
而且,如果读到的数据量很小,也会很快返回!
具体可以计算一下数据的传送时间,并检测一下收到的具体数据就可以了! 多谢指点 问题解决了,是串口读数问题造成的。
页:
[1]