我有一个项目,每1.125秒产生32768个int16_t值。将这些“打包”以通过USB传输的最有效方法是什么?目前,我正在使用每个值之间的逗号(以及每个4096个值的分号,最后一个字符为“ X”)抽出它们。在我看来,主机不会知道给定的值是一两个字节,因此预分配缓冲区并等待其填充将无法正常工作。
如果有帮助,则USB设备使用C ++编程,主机使用C#编程。在主机端,我从UWP示例中获得了此功能:
private async Task ReadAsync(CancellationToken cancellationToken)
{
Task<UInt32> loadAsyncTask;
uint ReadBufferLength = 98305;
// Don't start any IO if we canceled the task
lock (ReadCancelLock)
{
cancellationToken.ThrowIfCancellationRequested();
// Cancellation Token will be used so we can stop the task operation explicitly
// The completion function should still be called so that we can properly handle a canceled task
DataReaderObject.InputStreamOptions = InputStreamOptions.Partial;
loadAsyncTask = DataReaderObject.LoadAsync(ReadBufferLength).AsTask(cancellationToken);
}
UInt32 bytesRead = await loadAsyncTask;
if (bytesRead > 0)
{
ReadBytesTextBlock.Text += DataReaderObject.ReadString(bytesRead);
ReadBytesCounter += bytesRead;
UpdateReadBytesCounterView();
}
rootPage.NotifyUser("Read completed - " + bytesRead.ToString() + " bytes were read", NotifyType.StatusMessage);
}
有没有一种方法可以让我阅读直到检测到某个字符(例如“ X”)?最终,这些值需要解析为int16_t数组,以便我可以执行一些FFT。
我承认,现在我真的在一起破解并希望它能起作用,但是我希望有一种可靠且强大的方法来正确执行此操作。