日期:2014-05-16  浏览次数:20658 次

分块从串口发送图片数据,总是丢失部分数据,救命~急!急!急!急 (100分)在线等
各位牛人,我在这里先谢谢您看这个帖子了!

  我现在做的是用arm9,linux系统通过串口把大小是20k的图片发送到无线通讯模块。

  方法是,先把图片mmap到内存,然后分段发送到串口,通过串口到通讯模块发送到pc机,第一次测试的是5k的图片,

没有问题,第二次测试是20k的txt文件,没有问题,但是发送20k的图片的时候(3次测试都用一个方法),数据在发送一部分后出现丢失情况,并且丢失的大小和位置不确定,请问这是什么原因造成的呢?

  我怀疑一个是通讯模块的缓冲小,不能完成串口发送数据的全部传输,导致数据丢失,还有就是串口本身问题,使得数据丢失,再就是内存读取使得数据丢失。

  现在非常着急,赶着救命啊,各位大大,走过路过,指点一二啊,我感激不尽@如果能告诉解决的办法就更好了,现在

只能用串口传输,请帮帮忙看看~~~!!!!!!!!!!!!!!!!!!!!!!!!!
 

------解决方案--------------------
加校验,错误重传
------解决方案--------------------
要找出原因,可以试一下下面的方法;
既然你是用的无线模块,可能比较好做: 把串口接到无线模块那端的通信线都接到你PC的串口上,监视接受的数据,看数据是否有丢失的情况,从而可以判断是你的主机端或者是无线模块丢包,具体连接咨询一下你们的硬件工程师,着也是调试BT等常用的方式.
------解决方案--------------------
我认为应该是流量控制的问题。
------解决方案--------------------
如果你怀疑无线模块的内部缓存?那将包尽量放小,然后包加上校验并且等待接收方确认收到包之后再发下一包,确保数据正确完整到达!

按理说,你20K的txt文件都没有问题,图片应该没有问题! 另外注意下串口ESCAPE字符的问题!
-------------------------------------------

不知道你走的什么协议? 你的无线模块是指GSM/GPRS无线模块么?是在arm上,通过ppp将无线模块拨上网,通过GPRS进行的数据传输么? 还是其它方式?

------解决方案--------------------
一般的串口传输数据,最好自己定义一套通讯协议,比如规定一包数据有多长,发送的数据如何应答,怎么超时重传,怎么效验等等,不能完全依赖底层的串口协议.