从按照第 - GPS中间驱动问题

以上未成功回答觉得我有过这一问题的新信息,去一个新问题。

我现在面临的问题是,其数据正由GPS中间驱动程序传送的速度。

我已经成功地使用掌上腻子读取串行端口和看到的确切信息被曝光。

1 COM - GPS中间驱动程序

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

COM 8 - 虚拟串行端口,用于GPS硬件

当读取COM 8,I可以看到约18 NMEA串出现在每个〜3秒,这是尽可能快地,我们可以将其推过有限的USB连接。并迅速出现在显示屏上。当读取COM 6(从手动PC发送数据),则同样作为快速显示。所以存在与已经可用的数据没有问题。

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

问题是与COM8。当GPS中间驱动程序设置为COM1(软件)和COM8(硬件)。在PocketPutty显示在COM1的数据实在是太慢了。屏幕上的输出大约每秒5个字符,数据是有效的,但它只是一直非常缓慢交付。这对我指出的问题在虚拟串口的执行情况,如果GPS中间层驱动程序不读书在当时所有的数据只是一个角色,因为我已经分离出的问题,我的虚拟串口。

谁能提供一个虚拟串口实现的一个明显的例子,作为即时通讯不知道我可以改变,以改善这一点,给予COM8直接与GPS软件和PocketPutty应用,这表明可用,数据被读取的工作,和是正确的。

有帮助吗?

解决方案

运行调试版本的设备制造商获得支持后,这个问题的原因是客户端应用程序做了许多读取调用。串行端口可以处理他们自己的,而是通过GPS中间层驱动程序调用的次数过高,开销被削弱的通信,这是下降到互斥锁和一般线程问题。

客户端应用程序需要读取960个字节的每个读取数据到GPS中间驱动器,用于他们工作正常。这不是一个理想的解决方案,因此另一修复被发现。

分辨率为在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;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top