GPS中间驱动程序从虚拟串口驱动减慢数据
-
27-09-2019 - |
题
从按照第 - 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;
}