qq_21156923 2017-04-10 03:12 采纳率: 0%
浏览 3200

C# 串口发送卡死 求大神解决

上位机和底层的通信方式是同步的,上位机第一次发送可以完成。
串口接收到返回的信息进行判断,然后直接在接收函数中再次发送。
设置断点可以完成整个过程,但是直接运行,就卡死。
目前发现是接收到返回的信息后再次发送的时候,卡死。
请问如何解决?

 //串口接收事件
        private void comm_DataReceived(object sender, SerialDataReceivedEventArgs e) {
            while (comm.BytesToRead > 0) {
                rx_Buf[rx_Cnt++] = (byte)comm.ReadByte();
            }
            if (rx_Cnt == 8) { //8个字节 接收完成
                rx_Cnt = 0;
            } else {
                return;
            }
            Console.WriteLine("-----接收发回帧-----");

            if (rx_Buf[0] == 0xFF && rx_Buf[1] == 0xFE && rx_Buf[6] == 0xFE && rx_Buf[7] == 0xFF) {
                switch (rx_Buf[4]) {
                    case 0x01:
                        if (rx_Buf[5] == 0xAA) {
                            flag_State = FLAG_STATUS.STATE_WRITE;
                            send_file = true;
                            Console.WriteLine("-----验证成功 开始发送文件-----");
                        } else {
                            MessageBox.Show("0x01 失败");
                        }
                        break;
                    case 0x02:
                        if (rx_Buf[5] == 0xAA)
                            send_file = true;
                        else
                            MessageBox.Show("0x02 失败");
                        break;
                    default:
                        MessageBox.Show("失败");
                        break;
                }
                //验证通过,发送文件
                if (send_file) {
                    if (transLen < fileLenth) {
                        int len = fs.Read(sendBuf, 5, 1024);
                        Console.WriteLine("len:" + len.ToString());

                        if (len > 0) {
                            uint crcValue = Fn_GetCRC32(sendBuf, 5, 1024);

                            byte[] crcBytes = new byte[4];
                            for (int i = 4; i > 0; i--) {
                                crcBytes[4 - i] = (byte)(crcValue & 0xFF);
                                crcValue >>= 8;
                            }

                            for (int i = 0; i < 4; i++) {
                                sendBuf[1029 + i] = crcBytes[i];
                            }
                            transLen += len;
                            comm.DiscardOutBuffer();
                            Console.WriteLine("-----清空发送缓冲区-----");
                            comm.Write(sendBuf, 0, sendBuf.Length);

                            Console.WriteLine("transLen:" + transLen.ToString());
                            Console.WriteLine("------------------------------------");
                        }

                    } else {
                        MessageBox.Show("烧写完成");
                        try {
                            fs.Close();
                            comm.Close();
                        } catch (Exception) {
                        }
                    }
                    send_file = false;
                }
            }
        }
  • 写回答

1条回答 默认 最新

  • joker-fpga 2022-10-21 16:19
    关注

    解决了嘛,我也是遇到卡死不知道咋解决

    评论

报告相同问题?

悬赏问题

  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)