串口通信中接收数据时延迟处理与缓存处理的解决方案_第1页
串口通信中接收数据时延迟处理与缓存处理的解决方案_第2页
串口通信中接收数据时延迟处理与缓存处理的解决方案_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、串行通信中接收数据时延迟处理和缓存处理的解决方案使用c串行端口,通信发送方A将数据写入串行端口,然后通过无线或有线将数据传送到接收方BB,通过调用串行端口读取方法comm.read参数,可以读取数据。原理很简单,但是在最近使用串行端口处理SM-42无线传输时,数据总是以一定的时间B传输,comm_DataReceived方法不能简单地使用read方法完全接收数据。我知道使用缓存机制,但经验少,所以我发现在网络上找到大牛的方法,和自己的理解结合处理有两种方法。(莎士比亚,哈姆雷特,经验名言)方法1 comm_DataReceivedComm控件的数据接收方法会在数据存在的情况下引发线程悲伤。这是

2、因为以前不知道其他线程,所以编写了自己的线程处理程序,所以在串行端口等待数据的同时,不会影响主窗体或主线程的操作。所以当数据到达时,Thread .Sleep100允许接收函数休息100毫秒。这100毫秒是让所有数据到达B时重新读取。这样可以避免批到达的问题。显然,这是糊弄过去的。如果100毫秒也不够,方法2更合适。代码1 private void comm _ datareceivedobjectsender eventargs E2 3 thread . sleep 100/100毫秒待机4 int nrevice bytesnum comm . bytes to 5 byte REE首先

3、,定义成员变量List buffer new List4096,以在接收函数中定义所有数据buffer .通过AddRange方法将连续接收的数据添加到buffer并同时验证buffer中的数据,从而达到特定长度,并将验证结果正确的验证方法在发送方和接收方之间匹配并处理。具体代码如下:private list buffer new list 4096 private void Sp _ datareceivedobjectsender eventargs e/Sp是串行端口控制int n sp。bytes to read byte buf new byten sp。read buf 0n/1。

4、缓存数据buffer。AddRangebuf /2。完整性判断while buffer.奇偶校验位1字节取决于设计/2.1查找数据标头if buffer00x01 /传输数据int len buffer 2 if buffer . count len 4/数据区域具有帧标头,该标头确定未接收整个break /数据区域,从而将整个数据复制到ReceiveBytescontinue buffer . remove range 0 len 4/运行其他代码以处理数据。Else /框架标头无效时buffer。不要忘记清除RemoveAt0。方法2有“运行其他代码以处理数据”这句话。如果这些代码与主线程中的控件(例如LabelTextBox)相关,则会发生交叉线程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论