SIM900A会出现这种Case吗

2019-07-21 05:52发布

会不会出现以下这种情况:

假如,A时刻你给SIM900A模块发出查询命令后,正常情况下SIM900A至少在A+5时刻,才能给到你查询命令的回复,如果此时刚好服务器有TCP数据要发给你,会出现在A+5时刻之前,你就收到了服务器的TCP包的情形吗?

举个简单的例子:
建立TCP连接后,loop循环中需要做:
1.每隔10ms检查一下有没有来自服务器的TCP数据包
2.每隔5秒,给SIM900A发送查询信号强度的AT指令,并等待SIM900A的AT回复

会不会在我发完AT指令后,先收到TCP数据包,然后再收到AT回复吗?



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
csmjmcc
1楼-- · 2019-07-21 07:52
1、接收数据包后,根据数据包属性进行相应的处理,不区分接收时间顺序。
2、发送的数据需要确认回复的话,可以建立一个失效机制。在若干时间内未收到,则视为无效。或放弃或重发。
零一三南宫南
2楼-- · 2019-07-21 13:24
会的,接收中断肯定是会响应两次的,当然至于你最终MCU有没有接收到AT回复,还有看你的程序处理,如果你的程序像原子哥那样设计(接收到数据还没进行处理就不再接收)那么就可能接收缓冲中没有AT回复字符串,实际上接收中断已经触发了
Sanjay
3楼-- · 2019-07-21 16:47
Sanjay 发表于 2019-1-11 18:10
会的,接收中断肯定是会响应两次的,当然至于你最终MCU有没有接收到AT回复,还有看你的程序处理,如果你的 ...

嗯 中断肯定会一直响应的,至于会不会往BUF存,那要看前一帧数据有没有处理完

有没有更好的方法呢
abc3240660
4楼-- · 2019-07-21 19:34
 精彩回答 2  元偷偷看……
Sanjay
5楼-- · 2019-07-21 20:28
Sanjay 发表于 2019-1-14 09:16
你想要的效果是什么?

网络模块,现在我的接收数据中,除了AT指令的回复(比如定时查询RSSI和GPS),还有TCP包,有时还要从HTTP下载固件和MP3文件。

目前我用的就是原子哥sim900a.c的那种接收方式。
这种方式,可能会出现在我期待RSSI的AT回复时,却来了一帧TCP包,这样我在等待AT回复的地方,要增加检查是否是TCP包并解析的代码,本来是在主循环中来处理TCP包的,又额外加了一处,感觉怪怪的。

我曾想用环形buffer,但是又觉得如果里面同时存了多帧尚未处理的数据,帧与帧之间不太好分割

另外我想做成,开辟N个BUF,每来一帧就轮流/循环存到这N个BUF中,处理完做个特殊标记,这样即使同时存在RSSI的AT回复和TCP包两帧数据,我也可以遍历N个BUF,有选择的挑着处理


以上,我主要想解决的问题是:
1.担心处理慢时,会丢掉某帧数据
2.期待RSSI的AT回复前,却来了一帧TCP包
3.方便数据帧的分割(AT回复 / TCP包 / HTTP包)

可能我描述的比较乱,也不知道怎么做才最好,也不知道其他人都是怎么做的

一周热门 更多>