1

我之前已经发布过关于这个问题的帖子,但还没有真正找到问题所在。最近,我发现这篇关于detachbuffer的帖子,想知道这是否是我遇到问题的原因。

我的 UART 使用 FTDI USB 转 485 电缆连接到 Windows IoT Core 上的 Raspberry Pi,用于 RS485。我dispatchertimer每 1 秒设置一次以transmit轮询相应的现场设备。我能够txrx485 数据没有问题。但是,在轮询循环到大约 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 总线,它也没有崩溃。

4

0 回答 0