我通过SerialPort控件来读取串口信息
读取的时候会出现事件没有触发一样的效果,像是延时样
也就是本来是现在该触发的却要等到下次再触发
不知道是不是数据量过多
1,我要接收触摸屏的AD值
2,我要接收收音机的搜索到得频率
读取的时候会出现事件没有触发一样的效果,像是延时样
也就是本来是现在该触发的却要等到下次再触发
不知道是不是数据量过多
1,我要接收触摸屏的AD值
2,我要接收收音机的搜索到得频率
调试欢乐多
代码贴上来看下。
{
SerialPort sp = (SerialPort)sender; if (sp.IsOpen)
{
int bytesRead = sp.BytesToRead;//得到输入缓冲区的大小
int i = 0; while (i < bytesRead)
{
byte firstbyte = Convert.ToByte(sp.ReadByte());//取得一个字节
if (firstbyte == TBbyte1)
{
byte secondbyte = Convert.ToByte(sp.ReadByte());
if (secondbyte == TBbyte2)
{
byte lenbyte = Convert.ToByte(sp.ReadByte());
tempvalues = new byte[lenbyte + 2]; tempvalues[0] = firstbyte;//同步字1
tempvalues[1] = secondbyte; //同步字2
tempvalues[2] = lenbyte; //长度
int sum = 0;
sum = tempvalues[2];
for (int j = 0; j < lenbyte - 1; j++)
{
tempvalues[j + 3] = Convert.ToByte(sp.ReadByte());
sum += tempvalues[j + 3];
} if ((sum & 0x0f) == 0) //校验是否通过
{
mes = 1;
Invoke(ControlMes, tempvalues);
}
i = i + 2 + lenbyte;
}
else { i++; }
}
else
{
i++;
}
}
}
}
catch (Exception ei)
{ MessageBox.Show(ei.Message);
}
不好意思,我对触摸屏板不懂,我做的只是进行接收和处理
协议都是前2个同步字 +长度+命令+信息+效验TO sleep0110
我也想过只处理接收数据,不进行处理,不过具体应该怎么实现呢
给点思路
现在是只接收收音机的返回信息或者只接收触摸屏的AD值的时候都正常
在接收收音机信息的同时点击触摸屏就会出现不正常
本来我是点击A B C D点,结果是我点击c点的时候鼠标位置却在A点
点击D点的时候鼠标位置在B点,这样的结果
如果是这样的话,单独接收触摸屏,单独接收收音机都没问题,就不是串口数据接受的问题,是你解析串口数据的问题,如果出现延迟或者没有反应了,串口死掉之类才可能是串口问题。如果认为是串口接数据有问题,你可以用双缓冲区,譬如每次一个缓冲区接收100字节,第一缓冲区接满100字节去解析,第二缓冲区开始接,第二缓冲区接满了去解析再换第一缓冲区接,轮流交换。也可以用串口助手跟踪下数据看看,我认为串口数据是没错的,应该是你解析的问题。
做不同的事情起不同的线程,不要跟主线程混了,也不要自己把自己绕进去。baidu,google多线程例子那么多,看也能看明白了吧?