串口接收,线程里还是 有点小问题
lizhibin11 根据提供的,稍作修改
在线程里打断点,一直按F5,解包正常。
但是,当去掉断点后,,全速跑,就出问题了
下面是测试按钮里,模拟ARM板发送数据包,也就是自发自收(串口2,3短接即可)
按下按钮,,线程启动,,一直接收数据,(其实,我按钮就按一下,也就说了一次而)
第一个问题就是如下:
while (true) { int recvlen = comm.Read(buffer, offset, count); // count ,不知道哪里给改变成 负值了
private void button6_Click(object sender, EventArgs e) { int n; byte[] sendbyte = { 0xF0, 0x03, 0x7E, 0x01, 0x8E, 0x70, 0x01, 0x17, 0x01, 0x06, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x42, 0x70, 0x01, 0x17, 0x01, 0x06, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x76,0xF0, 0x03, 0x7E, 0x03, 0x8B}; ThreadPool.QueueUserWorkItem(recv2, comm); while (true) { comm.Write(sendbyte, 0, sendbyte.Length); n = sendbyte.Length; send_count += n;//累加发送字节数 labelSendCount.Text = "Send:" + send_count.ToString();//更新界面 } }
static void recv2(object obj) { SerialPort comm = (SerialPort)obj; byte[] buffer = new byte[256]; int offset = 0; int count =2; while (true) { int recvlen = comm.Read(buffer, offset, count); if (recvlen != count) { offset += recvlen; count -= recvlen; continue; } if (offset < 2) { if (buffer[0] == 0xf0) { offset = 2; count = buffer[1]; continue; } if (buffer[0] == 0x70) { offset = 2; count = 1; continue; } } if (offset < 3) { offset = 3; if (buffer[0] == 0x70) { count = buffer[2] - 3; } else { count = buffer[1] - 3; } continue; } int len = 0; if (buffer[0] == 0xf0) len = 2 + buffer[1]; else len = buffer[2]; //显示buffer从0到len的内容 offset = 0; count = 2; } }