GPS中间驱动程序减慢虚拟串行端口驱动程序的数据

时间:2010-11-22 13:39:38

标签: gps serial-port windows-mobile virtual-serial-port windows-mobile-gps

关注 - GPS Intermediate Driver Issues

以上内容未得到成功解答,我觉得我有关于该问题的新信息可以提出新问题。

我面临的问题是GPS中间驱动程序提供数据的速度。

我已成功使用Pocket Putty读取串口并查看已公开的确切信息。

COM 1 - GPS中间驱动程序

COM 6 - 串口到PC(手动输入数据)

COM 8 - GPS硬件的虚拟串行端口。

当读取COM 8时,我可以看到每隔约3秒钟出现大约18个NMEA字符串,这与我们可以通过有限的USB连接推送它一样快。它会在显示屏上快速显示。读取COM 6(手动从PC发送数据)时,它显示速度相同。所以数据没有问题。

输入GPS中级驱动程序。当GPS中间驱动程序设置为COM1(软件)和COM6(硬件)时。 COM6上输入的数据与没有GPS中间驱动程序的情况一样快地显示在COM1上。数据没有改变,所以如果我在COM6上发送“JON”,它将出现在COM1上,即使它没有有效的NMEA数据,这很好。

问题出在COM8上。当GPS中间驱动程序设置为COM1(软件)和COM8(硬件)时。在COM1上的PocketPutty中显示的数据非常慢。屏幕上的输出大约是每秒5个字符,数据有效但输送速度非常慢。这对我来说指出了虚拟串口实现中的一个问题,好像GPS中间驱动程序一次只能读取一个字符的所有数据,因为我已将问题隔离到我的虚拟串口。

任何人都可以提供虚拟串口实现的明确示例,因为我不知道我可以改变什么来改善这一点,因为COM8直接与GPS软件和PocketPutty应用程序配合使用,这表明数据可用,正在读取,并且是正确的。

1 个答案:

答案 0 :(得分:0)

在获得运行调试版本的设备制造商的支持后,问题的原因是客户端应用程序正在进行许多读取调用。串口可以自己处理它们,但是通过GPS中间驱动程序,调用次数太多而且开销严重阻碍了通信,这取决于Mutex锁和一般线程问题。

客户端应用程序需要读取每次读取960字节的数据到GPS中间驱动程序才能正常工作。这不是一个理想的解决方案,因此找到了另一个解决方案。

解决方案是在read方法中添加WaitForSingleObject(IsThereEnoughGPSDATAEvent,COMTotalTimeout),以便所有读取只有在有足够数量的可用数据时才能获取数据。最初我要求960在缓冲区中可用,但我已将其设置为仅10个字节,它仍然有效。

示例代码

DWORD COM_Read( DWORD hOpenContext, LPVOID pBuffer, DWORD Count )
{
    if(gpsThreadEvents[GPS_THREAD_EVENT_DATA_AVAILABLE] != NULL)
    {
        if(WaitForSingleObject(gpsThreadEvents[GPS_THREAD_EVENT_DATA_AVAILABLE], GPSTimeouts.ReadTotalTimeoutConstant) != WAIT_OBJECT_0)
        {
            return 0;
        }
    }

    //read code goes in here

    return dataOut;
}