因为使用GPRS进行数据的一些传输,在使用时总发现有些不是十分稳定。
以至于在修改时,都改到串口的读取上了(见《串口的初始化配置》),
但是GPRS这里的问题还是没有得到真正解决。
以下关于GPRS的一些问题基于使用的是SIM900A模块的基础上。
主要遇到的问题:
首先是GPRS的连接时有时候会掉线,而且这个分时段,有时候很好,有时候就连不上。
其次是GPRS在发送数据的过程中,读发送的返回结果数据,但是这个时候可能将PC端发下的数据,一起读出来。
造成在真正读GPRS时,串口中没有数据,而造成数据丢失。
这里第一个问题,虽然想过解决的方法,但是都不是很理想,还是有一段时间会掉线造成连不上。没有找到更好的办法,能做的就是调整注册逻辑,保证掉线后尽快建立连接。
所以主要讨论关于第二个问题,因为它对于系统的影响最大。
如果在发送数据时,将之后需要读取的数据读到了返回结果的缓冲区中,这肯定要造成丢数据的现象。所以这里另外设置一个缓冲区用来存放不是返回结果的数据,在发送时,对读到的结果数据进行判断,如果此数据帧中只有返回结果数据,则不作其他处理。如果在此次返回结果数据中还有其他数据,则将其他数据保存到设置的缓冲区中,并且记录其长度及设置相应的标识位,在读数据时,判断相应标识位,如果设置了标识位,则根据记录的长度,将缓冲区中的数据取出,并就将缓冲区、标识位、长度记录清零,以备下次使用。
这样处理之后,发现效果好了很多,没有数据再因读发送结果而造成的丢失问题。
注:在写程序时,一开始还因为接收字节的设置小于实际的串口数据字节长度问题造成错误,这里要注意,一定要保证接收字节的设置,一定要大于串口的数据长度,避免发生这种Bug。