Aquarius-Michael
@Aquarius-Michael
Программист и железячник

Как решить проблему со сканированием списка доступных устройств FTDI?

Есть странная проблема при сканировании устройств FTDI. Первое сканирование проходит без проблем. Показывается список устройств. Допустим, у нас два устройства. В списке отображаются четыре, так как у микросхемы два порта-устройства. После первого подключения сканирование доступных устройств работает нормально. А вот после второго подключения уже начинаются проблемы. Попытка сканирования устройства приводит к утечке памяти, если судить по показаниям отладчика. И на этом месте останавливается. Странно, что не выдаёт ноль хотя бы, раз больше недоступны.

public TemplateFTDI.InfoDevice[] GetNumberOfDevices()
        {
            DeviceCount = 0;

            DeviceStatus = FTDI.FT_STATUS.FT_OK;

            // количество обнаруженных устройств
            DeviceStatus = Device.GetNumberOfDevices(ref DeviceCount);

            // составление списка устройств
            DeviceList = new FTDI.FT_DEVICE_INFO_NODE[DeviceCount];

            DeviceStatus = Device.GetDeviceList(DeviceList);

            InfoDevice = new TemplateFTDI.InfoDevice[DeviceCount];

            for (uint i = 0; i < DeviceCount; i++)
                InfoDevice[i] = new TemplateFTDI.InfoDevice()
                {
                    Number = i,
                    Description = DeviceList[i].Description.ToString(),
                    Flags = DeviceList[i].Flags.ToString(),
                    Handle = DeviceList[i].ftHandle.ToString(),
                    ID = DeviceList[i].ID.ToString(),
                    LocID = DeviceList[i].LocId.ToString(),
                    SerialNumber = DeviceList[i].SerialNumber.ToString(),
                    Type = MessageParse.TypeDevice(DeviceList[i].Type.ToString()),
                };
            return InfoDevice;
        } // получение списка обнаруженных устройств


На месте GetNumberOfDevices происходит утечка памяти.

P.S. Микросхемы работают в режиме Sync FIFO.

Обновление информации. Когда работает одно устройство, то никаких проблем с утечками нет.
  • Вопрос задан
  • 158 просмотров
Решения вопроса 1
Aquarius-Michael
@Aquarius-Michael Автор вопроса
Программист и железячник
Проблема решилась. Отвечу на свой вопрос. Оказывается, неправильно применил механизм доступа к элементам из потока. Из-за чего блокировались устройства. Вместо Dispatcher.BeginInvoke надо ставить Dispatcher.Invoke. Именно в этом месте происходит утечка памяти. Правда скорость доступа к устройствам заметно упала. Но это не так критично.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы