FTDI VCP как читать бесконечный поток данных C # - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть микроконтроллер, который отправляет пакеты данных с высокой скоростью передачи данных.Мне нужно прочитать и проанализировать эти данные, чтобы построить сюжет.Я использовал класс SerialPort и поток.Возникает проблема, которая иногда приводит к зависанию потока и потере некоторых пакетов.

Функция открытого порта:

 private void OpenPortButton_Click(object sender, RoutedEventArgs e)
    {
        _port.Parity = (Parity)ParityChooserBox.SelectedItem;
        _port.PortName = (string)PortChooserBox.SelectedItem;
        _port.BaudRate = (int)BaudRateChooserBox.SelectedItem;
        _port.DataBits = (int)DataBitsChooserBox.SelectedItem;
        _port.StopBits = (StopBits)StopBitsChooserBox.SelectedItem;
        try
        {
            _port.Open();
        }
        finally
        {
        }

        _readThread = new Thread(ReadData);
        _readThread.Start();
    }

и функция чтения:

private void ReadData()
    {
        var Data = new List<int>();
        while (true)
        {
            if (_stopThread)
                break;
            Data.Add(_port.ReadByte());
            if (_readPacket && _currentPacketSize != 0)
            {
                _currentPacketSize--;
            }
            else if (_readPacket && _currentPacketSize == 0)
            {
                var delegateAnalyza = new AnalyzaDel(Analyze);
                Dispatcher.Invoke(delegateAnalyza, Data);
                _readPacket = false;
                Data = new List<int>();
            }
            else
            if (_readSize)
            {
                _readPacket = true;
                _currentPacketSize = Data[Data.Count - 1];
                _readSize = false;
            }
            else
            if (Data.Count >= 3 && Data[Data.Count - 1] == Data[Data.Count - 2] && Data[Data.Count - 3] == Data[Data.Count - 1] &&
                Data[Data.Count - 1] == 255)
            {
                _readSize = true;
            }
        }
    }

Пакет начинается с 3 0xFFбайт.

...