6528|6

3238

帖子

5

TA的资源

五彩晶圆(中级)

楼主
 

ESP8266如何调试分析 [复制链接]

          ESP8266的开发环境采用的是在Linux编译开发的,不像在IAR或者MDK里面开发那么方便,可以设置断点等等分析问题,出了问题就只有靠猜了,最头疼的是官方还不开源所有的错误信息,导致出了问题就更没法跟踪了。比如我这段时间遇到一个域名解析一直重启的问题,特别纳闷,折腾了一个多礼拜还没解决,不过最终还是被我解决了(大胆假设,小心求证),相关信息如下:

只有加了右边的代码就模块一直重启,搞得我还以为官方wifi固件是不支持多个服务器交互的,毕竟官方也没这样的案例和应用~~~~~~~~~~~~~~~~~~~~

对于这种问题,虽然我们定位比较苦难,但是也不是一无所措,对此我们应该如何定位呢?

1:首先你在调试时最好将错误信息打印出来,这个对于你定位问题有帮助,定位代码如下:
        struct rst_info *rst_info = system_get_rst_info();       
        os_printf("reset reason: %x\n", rst_info->reason);       
        if(rst_info->reason == REASON_WDT_RST || rst_info->reason == REASON_EXCEPTION_RST || rst_info->reason == REASON_SOFT_WDT_RST)
        {
                if (rst_info->reason == REASON_EXCEPTION_RST)
                {
                    os_printf("Fatal exception (%d):\n", rst_info->exccause);
                }
                os_printf("epc1=0x%08x, epc2=0x%08x, epc3=0x%08x, excvaddr=0x%08x, depc=0x%08x\n",rst_info->epc1, rst_info->epc2, rst_info->epc3, rst_info->excvaddr, rst_info->depc);
        }
我们在第一张图片看到了模块复位原因是2,2是神马呢?我们在源码中找到错误定义
enum rst_reason {
        REASON_DEFAULT_RST                = 0,
        REASON_WDT_RST                        = 1,
        REASON_EXCEPTION_RST        = 2,
        REASON_SOFT_WDT_RST           = 3,
        REASON_SOFT_RESTART         = 4,
        REASON_DEEP_SLEEP_AWAKE        = 5,
        REASON_EXT_SYS_RST      = 6
};原来是异常重启,这样你就缩短了问题,比如你不会去考虑上面其他六种问题,什么电源不稳定,任务占用时间太长导致看门狗复位等等。既然是异常服务,那我们接下来如何分析了,我们找到我们的代码.s文件。这个文件可以告诉你错误出现在那个函数。根据错误epc1=40222bc2,我们找到这个地址的代码(不过都是汇编,水平有限没看出什么问题)。

40222bbc :
40222bbc:        628c              beqz.n        a2, 40222bc6
40222bbe:        2248              l32i.n        a4, a2, 8
40222bc0:        020c              movi.n        a2, 0
40222bc2:        5439              s32i.n        a3, a4, 20
40222bc4:        f00d              ret.n
40222bc6:        427c              movi.n        a2, -12
40222bc8:        f00d              ret.n

哇靠,直接卡壳了,到这部怎么分析了?我之前一直卡着这里,被搞懵逼了。对于这部分,说心里话,我没搞明白,那问题怎么分析下去呢?我采用大胆假设,小心求证的方法,我是这样认为的:既然是espconn_regist_reconcb异常了,那一定是有关TCP这块哪里配置有问题,为什么这样说呢?因为所有有关TCP的错误信息都需要在这个回调函数里面处理,所以我就仔细查看有关TCP的配置信息,终于被我找到了m2m_conn没有被初始化导致异常,最后加入如下代码,世界从此安静了!
m2m_conn.proto.tcp=&m2m_tcp;
m2m_conn.type = ESPCONN_TCP;
m2m_conn.state = ESPCONN_NONE;

最后上传一个文件






最后我的代码很happy的跑了一上午,从此不再担心模块宕机了~~~~~~~~~~~~




此帖出自RF/无线论坛

最新回复

这款片子我去年开始玩的,反正也走了很多弯路。  详情 回复 发表于 2016-11-10 10:15

赞赏

1

查看全部赞赏

点赞 关注(2)
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 

回复
举报

419

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
此帖出自RF/无线论坛
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
淘宝联系你了。请回复
此帖出自RF/无线论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

4
 
看见你对8266的了解。能交流下吗?我QQ237369073 我也淘宝刚联系你了
此帖出自RF/无线论坛

点评

不用淘宝联系我,我基本好少登淘宝,如果需要买东西,直接下单就行,至于交流技术,直接在论坛就行  详情 回复 发表于 2016-11-6 12:42
 
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

5
 
hechangfei88 发表于 2016-11-6 03:47
看见你对8266的了解。能交流下吗?我QQ237369073 我也淘宝刚联系你了

不用淘宝联系我,我基本好少登淘宝,如果需要买东西,直接下单就行,至于交流技术,直接在论坛就行
此帖出自RF/无线论坛
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

6
 
这款片子我去年开始玩的,反正也走了很多弯路。
此帖出自RF/无线论坛

点评

多走弯路是好事,可以学到很多东西,孤独九剑也是从败招里面抽取出来的,。没问题才可怕。  详情 回复 发表于 2016-11-11 09:45
个人签名千古情怀何寄!
 
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

7
 
donsbin 发表于 2016-11-10 10:15
这款片子我去年开始玩的,反正也走了很多弯路。

多走弯路是好事,可以学到很多东西,孤独九剑也是从败招里面抽取出来的,。没问题才可怕。
此帖出自RF/无线论坛
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表