GPS промежуточный драйвер, замедленный данные из драйвера виртуального последовательного порта

StackOverflow https://stackoverflow.com/questions/4245971

Вопрос

Следовать от - GPS промежуточные проблемы водителя

Вышеуказанное не было успешно отвечено и почувствовать, что у меня есть новая информация о проблеме, чтобы пойти на новый вопрос.

Проблема, которую я сталкиваюсь, - это скорость которых данные доставляются промежуточным водителем GPS.

Я успешно использовал карманную замазку, чтобы прочитать последовательные порты и увидеть точную информацию.

COM 1 - GPS промежуточный водитель

COM 6 - последовательный порт на ПК (входные данные вручную)

COM 8 - Виртуальный последовательный порт для оборудования GPS.

При чтении COM 8 я могу видеть около 18 строк NMEA, появляются каждые ~ 3 секунды, это так же быстро, как мы можем протолкнуть его по ограниченному соединению USB. И это появляется быстро на дисплее. При чтении COM 6 (отправлять данные с ПК вручную), он отображается одинаково. Таким образом, нет проблем с имеющимися данными.

Введите в промежуточный драйвер GPS. Когда промежуточный драйвер GPS установлен на COM1 (программное обеспечение) и COM6 (оборудование). Данные, введенные на COM6, отображаются на COM1 так же быстро, как и без промежуточного драйвера GPS. Данные неизменены, поэтому, если я отправлю «Джон» на COM6, он появится на COM1, хотя его не допустимые данные NMEA, что в порядке.

Проблема с COM8. Когда промежуточный драйвер GPS установлен на COM1 (программное обеспечение) и COM8 (оборудование). Данные, показывающие в PocketPutty на COM1, действительно медленно. Выход на экране составляет около 5 символов в секунду, данные действительны, но она просто доставляется очень медленно. Это мне указывает на проблему в реализации виртуального последовательного порта, как если бы промежуточный драйвер GPS не читает все данные только один символ за раз, учитывая, что я выделил проблему на мой виртуальный последовательный порт.

Может кто-нибудь предоставить четкий пример реализации виртуального последовательного порта, так как я не уверен, что я могу измениться, чтобы улучшить это, данный COM8 напрямую работает с программным обеспечением GPS и приложением PocketPutty, что указывает на доступность данных, чтение и правильно Отказ

Это было полезно?

Решение

После получения поддержки от производителя устройства выполняют сборку отладочной сборки, причина проблемы была приложениями клиента, прилагаемые к многим вызовам чтения. Последовательный порт может справиться с ними самостоятельно, но через промежуточный водитель GPS количество вызовов было слишком высоким, а накладные расходы были накисляющими связи, это было до блокировков Mutex и общих проблем с резьбой.

Клиентские приложения должны прочитать 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