我之前已经发布过关于这个问题的帖子,但还没有真正找到问题所在。最近,我发现这篇关于detachbuffer的帖子,想知道这是否是我遇到问题的原因。
我的 UART 使用 FTDI USB 转 485 电缆连接到 Windows IoT Core 上的 Raspberry Pi,用于 RS485。我dispatchertimer
每 1 秒设置一次以transmit
轮询相应的现场设备。我能够tx
和rx
485 数据没有问题。但是,在轮询循环到大约 20 次之后,它就崩溃并退出了调试模式。我曾经try & catch
捕获异常但无法获取它。但是,我设法在debug output
窗格中阅读了错误消息-The program [0xBB0] PwD.exe' has exited with code -1073741811 (0xc000000d).
我想知道如果我反复传输轮询,dataWriteObject.DetachBuffer();
会导致问题吗?谢谢。
我的代码片段如下;
private void PollTimer_Tick(object sender, object e)
{
if (pollCounter <= maxDevice)
{
var a = pollCounter | 0x80;
pollCounter++;
TxAdr = Convert.ToByte(a);
TxCmd = TxPoll;
TxPollCard();
}
else pollCounter = 0;
}
private async void TxPollCard()
{
if (serialPort != null)
{
List<byte> data = new List<byte>();
data.Add(TxHeader);
data.Add(TxAdr);
data.Add(TxCmd);
TxChkSum = 0;
foreach (byte a in data)
{
TxChkSum += a;
}
TxChkSum = (byte)(TxChkSum - 0x80);
data.Add(TxChkSum);
try
{
// Create the DataWriter object and attach to OutputStream
dataWriteObject = new DataWriter(serialPort.OutputStream);
dataWriteObject.WriteBytes(data.ToArray());
Task<UInt32> storeAsyncTask;
// Launch an async task to complete the write operation
storeAsyncTask = dataWriteObject.StoreAsync().AsTask();
UInt32 bytesWritten = await storeAsyncTask;
dataWriteObject.DetachBuffer();
}
catch (Exception ex)
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
MainStatusDisplay.Text = ex.Message;
});
}
}
else
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
MainStatusDisplay.Text = "No UART port found";
});
}
}
更新:
我做了额外的测试,我断开设备并继续传输而不期待响应,它没有崩溃。另一方面,我停止传输,只listen
到 485 总线,它也没有崩溃。