这是我以前发的一个帖子,问题到现在都没有解决,但是放在那里始终不舒服,所以想重新在这里问问大家,能解决最好,不过更多的还是知识交流,从中学到一些东西。
我:
上位机与下位机循环交换数据,结果发现这个函数会产生3毫秒多的延迟,不论是同步还是异步方式都试过了,结果都不一样,如果这样,那么高速通信岂不是扯淡了?在进行大量数据传输时不就累积得越来越多了嘛?
回复者:
先看延时是否为通信或者是处理的时间,可能是处理本身需要消耗
如果有延时,那么就要么同步,导致处理原来越慢
我:
怎么说?我已经锁定到ReadFile这个函数本身,下位机只返回一个字节,而且返回时间正常,一旦它返回我就立即发送,不应该出现这样的情况的
回复者:
使用串口通信多数是PC端等下位机。
如果用的是同步模式,ReadFile之前先ClearCommError,获取COMSTAT::cbInQue,如果没有数据可读马上返回不调用ReadFile,这样就不会阻塞。
我:
这个我也试过的,结果是时间一样没有减少,这个函数还是延迟了那么长的时间,也就是说,我要进行10次数据交换,那么最终会调用10次ReadFile,就是这10次造成了时间浪费。我用示波器看过的,下位机返回数据绝对很快
回复者:
9600,8位串口一个字节约1ms,来回2ms。
提高波特率试试
我:
用的12800的波特率,从示波器看是下位机返回后到我下次发送的时间为3毫秒多,我的函数是收到就继续发,中间没有耽误的。也就是说我仅仅是收的过程就用掉了3毫秒多,这是正常呢还是不正常?
回复者:
用GetTickcount()测量下‘收到就继续发’用了多少时间。
回复者:
是下位机收到继续发。
不是你返回继续发。
最好是用写缓冲。
回复者:
3豪秒不知道你是怎么测量出来的?用示波器测的吗?
你保证你WriteFile之后系统马上就发送你的数据?你试试WriteFile之后马上FlushFileBuffers再测量。
我知道改过的串口速率可以去到921600bps,即112K字节左右,这种速度都没有问题。
如果你要实时性的操作,多任务系统可能不适合你,你可以用DOS,实时性保证满意。
我:
改用winio操作端口了,曲线解决,实际上问题还是没有解决。
楼主最近还看过