串口实时采集的问题,急急急!
导师让做一个串口实时采集的程序,用来验证FPGA中输出数据的正确性。FPGA发送数据的格式是每个数据包用十六进制的EB和AD作为同步头,后面再加上3个十六进制的数据,进行编码后,加上起始位、校验位、停止位一共55位;发送周期为10毫秒,用19200的波特率,我算了一下,不到3毫秒就发完了。
我一开始用CSerialPort类和MSCOMM控件的OnComm函数,每当检测到有连续的EB和AD时,我就记录下当前的时间,并记下后面3个字符然后进行处理,可是发现经常有漏采的情况,表现为前3个数据包之间都差10毫秒,而第四个就差了20毫秒,甚至于后面有的还差了30、40、60的,不知道这是什么原因?
后来我用再网上看到说事件驱动的发放容易漏数,查询的方法对实时采集更有效,我就用MSCOMM控件写了一个ReadComm函数,并用多媒体定时器定时周期1毫秒去运行ReadComm,只要有数据马上读进来进行处理,但是在WIN2K里进行实际数据采集时发现检测周期经常会变大到2、3、6毫秒,最大的一次甚至是隔了两百多毫秒才去读串口,结果一下读进很多数据,极度影响了数据采集的实时性;而且只要我一运行我的程序,WIN2K的CPU占用率就一直是100%,电脑也比较烂,最后我只能从任务管理器才能将程序关闭。因为本来数据是每10ms发过来一次的,我中间收到的数据的周期也应该是10ms。所以这样让我无法判断正确性。
请问这到底是什么问题呢?我应该怎么做才行呢?不胜感激啊!