UWP C#UART RS485分离缓冲器

问题描述

我以前有posted的问题,但是还没有真正发现问题。 最近,我发现了有关detachbuffer的帖子,想知道这是否可能是我遇到问题的原因。

我使用FTDI USB转485电缆将RS485的UART连接到Windows IoT核心版上的RaspBerry Pi。 我每1秒钟将dispatchertimer设置为transmit轮询到相应的现场设备。 我可以txrx毫无问题地访问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总线,它也没有崩溃。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)