быстрый способ чтения байтов из порта и записи их в файл - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь прочитать 1536 байтов в цикле из com-порта и добавить их в файл bin.Это кажется слишком медленным.10сек = 100кб записывается в файл.Я использую USB FS, поэтому проблема не в скорости USB.Как я называю подпрограмму:

    If receivedData.Contains("mcu_r") Then
            Call Read(spObj, 1536)
            receivedData = vbNullString


            Exit Sub
        End If

Прочитайте и сохраните в подпрограмму файла:

 Public Function Read(ByVal port As SerialPort, ByVal count As Integer) As Byte()
        Dim buffer(count - 1) As Byte
        Dim readBytes As Integer
        Dim totalReadBytes As Integer
        Dim offset As Integer
        Dim remaining As Integer = count

        Try
            Do
                readBytes = port.Read(buffer, offset, remaining)
                offset += readBytes
                remaining -= readBytes
                totalReadBytes += readBytes
            Loop While remaining > 0 AndAlso readBytes > 0
        Catch ex As TimeoutException
            ReDim Preserve buffer(totalReadBytes - 1)
        End Try
        Using vFs As New FileStream(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\myfile.bin", FileMode.Append) 'save
            vFs.Write(buffer, 0, 1536)
        End Using
        'lable_count = lable_count + 2048
        'Dim strTemp As New StringBuilder(512 * 2)
        'For Each b As Byte In buffer
        '    strTemp.Append(Conversion.Hex(b))
        'Next

        'Dim builder As New StringBuilder(strTemp.ToString)
        'Dim startIndex = builder.Length - (builder.Length Mod 2)

        'For i As Int32 = startIndex To 2 Step -2
        '    builder.Insert(i, " "c)
        'Next i
        'Form1.RichTextBox1.Text &= builder.ToString()
        'Form1.RichTextBox1.Text &= strTemp.ToString
        Dim BytesToSend(0) As Byte
        Dim OutBuffer
        BytesToSend(0) = &H11             ' call Dump eeprom (44)
        'dummy
        Dim v As String
        OutBuffer = BytesToSend

        ' Bytes are outputted in the order of their Index Number(Index)!

        Form1.spObj.Write(OutBuffer, 0, OutBuffer.length)
        Return buffer

    End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...