OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2474|回复: 6

SIM900A会出现这种Case吗

[复制链接]

43

主题

147

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
465
金钱
465
注册时间
2016-4-29
在线时间
137 小时
发表于 2019-1-11 16:50:31 | 显示全部楼层 |阅读模式
1金钱
会不会出现以下这种情况:

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

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

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



最佳答案

查看完整内容[请看2#楼]

1、接收数据包后,根据数据包属性进行相应的处理,不区分接收时间顺序。 2、发送的数据需要确认回复的话,可以建立一个失效机制。在若干时间内未收到,则视为无效。或放弃或重发。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

317

帖子

0

精华

高级会员

Rank: 4

积分
863
金钱
863
注册时间
2015-2-12
在线时间
354 小时
发表于 2019-1-11 16:50:32 | 显示全部楼层
1、接收数据包后,根据数据包属性进行相应的处理,不区分接收时间顺序。
2、发送的数据需要确认回复的话,可以建立一个失效机制。在若干时间内未收到,则视为无效。或放弃或重发。
回复

使用道具 举报

头像被屏蔽

18

主题

184

帖子

0

精华

禁止发言

积分
258
金钱
258
注册时间
2019-1-10
在线时间
10 小时
发表于 2019-1-11 17:48:14 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

6

主题

48

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6222
金钱
6222
注册时间
2018-12-2
在线时间
112 小时
发表于 2019-1-11 18:10:21 | 显示全部楼层
会的,接收中断肯定是会响应两次的,当然至于你最终MCU有没有接收到AT回复,还有看你的程序处理,如果你的程序像原子哥那样设计(接收到数据还没进行处理就不再接收)那么就可能接收缓冲中没有AT回复字符串,实际上接收中断已经触发了
回复

使用道具 举报

43

主题

147

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
465
金钱
465
注册时间
2016-4-29
在线时间
137 小时
 楼主| 发表于 2019-1-14 08:37:27 | 显示全部楼层
Sanjay 发表于 2019-1-11 18:10
会的,接收中断肯定是会响应两次的,当然至于你最终MCU有没有接收到AT回复,还有看你的程序处理,如果你的 ...

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

有没有更好的方法呢
回复

使用道具 举报

6

主题

48

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6222
金钱
6222
注册时间
2018-12-2
在线时间
112 小时
发表于 2019-1-14 09:16:04 | 显示全部楼层
abc3240660 发表于 2019-1-14 08:37
嗯 中断肯定会一直响应的,至于会不会往BUF存,那要看前一帧数据有没有处理完

有没有更好的方法呢

你想要的效果是什么?
回复

使用道具 举报

43

主题

147

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
465
金钱
465
注册时间
2016-4-29
在线时间
137 小时
 楼主| 发表于 2019-1-14 10:01:48 | 显示全部楼层
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包)

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 03:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表