记一次ESP8266 WIFI模块调试----TCP 数据处理同时发送心跳

记一次ESP8266 WIFI模块调试----TCP 数据处理同时发送心跳

一、情景再现

1、需要实现的功能

1) 接收中国移动云平台Onenet的EDP协议的数据,处理后应答给云平台.

2) 保持与云平台的心跳报文,每10s发送一次心跳。


2、实现方案

1)心跳报文采用10s软定时器,定时发送.

2)移动云的请求数据为中断方式接收后处理应答。(推测是中断方式,没有找到配置中断优先级的地方,乐鑫数据手册并没有找到相关资料)


3、问题描述

对于云平台的请求处理会出现应答失败的情况.在客户端看出现请求没有应答的情况。


4、问题排查

1)实验一:将软定时器设置为100ms,在中断函数里不发送心跳报文.

   现象:通信正常,不会出现丢包情况.

2)实验二:将软定时器设置为100ms,在中断函数里发送心跳报文.

 现象:通信严重影响,丢包情况严重。

3)实验三:将软定时器设置为100ms,在中断函数里发送心跳报文.同时打印接收到数据和准备发送的数据.

  现象:客户端看没有应答;但是wifi模块接收数据正常(通过串口打印),准备发送的数据被打印正常。TCP数据发送失败.


  结论:定时器中断函数不会影响TCP的接收和发送;

            定时器中断函数里TCP发送报文会打断/覆盖之前的TCP发送数据.


5、解决

1)TCP数据接收:

在收到云平台的请求报文时(不是心跳的应答报文)给云平台响应报文的TCP发送操作加一把锁.当定时器时间到后,准备通过发送心跳

报文时要检查是否有云平台响应报文的TCP发送,有则取消本次心跳报文的发送。      

2)TCP发送完成:

 a.在TCP发送完成的回调函数里将云平台响应报文的TCP发送锁取消,

 b.同时将心跳报文的计数器清零。


6、尾巴

1)解决方法就是所谓的互斥锁。


   

  

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值