|
小弟现在正在用SIM300 GPRS模块在做一些开发,用的是430的单片机。GPRS模块和单片机是通过串口进行数据通信的。在写程序的时候遇到了一个很大的麻烦。首先GPRS模块返回数据(向单片机发送数据)具有很大的随机性,什么时候有数据过来时不确定的。在程序中数据接收用的是中断处理,于是问题来了。
比如我想在向SIM300发一个AT指令,指令正确的话应该向单片机返回ATOK我现在想要对返回的数据进行采集,以便进行分析。但是我该从什么时候开始采集,又该怎么判断采集结束呢,用肯定不行,不是因为数据是以开始,又是以结束,而是假如在向SIM300发完指令,而SIM300还没来得及返回ATOK时,突然收到一条短信(收到短信,模块也会向单片机返回数据进行提示,这些数据都是以开始和结束的),这样的话很定会发生误判。又不能采用一直等的方式,这样很容易产生死循环。试了好多方法都不是太理想,比如以有数据发过来,且多长时间没有数据继续发过来作为判结束。这些方法都能判断一帧数据结束,但是不能解决我上面提到的问题,也就是这帧数据是不是之前所发指令所回应的数据。说白了问题的根本就是,可以判断一帧数据结束,但是无法判断着帧数据是不是之前所发指令回应数据,如果就此判断肯定会发生误判。
怎样对串口的数据进行提取才比较安全有效啊,有哪位大虾做过相关开发没,指点指点小弟啊。小弟也写了一些demo程序,也能跑的起来,但是不是太健壮,程序跑飞的情况时有发生。主要就是在串口数据采集过程中存在问题,SIM300模块返回的数据不是误判了,就是没采集到。
|
|