请选择 进入手机版 | 继续访问电脑版
论坛
登录 | 立即注册 设为首页收藏本站 切换到宽版
查看: 50|回复: 0

进入Light Sleep休眠的时候模块复位了

[复制链接]

1

主题

1

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2018-11-5 14:43:06 | 显示全部楼层 |阅读模式
我正在测试Light sleep休眠,但是模块有时候会复位。当模块在smart config时启动light sleep,模块不会复位。但是如果模块在station模式并连接了路由器,有时候就会复位。启动light sleep之前我把定时器都关闭了。我的SDK版本是,NONOS 3.0.0,有大神可以能知道原因吗?


  1. sleep_time_cnt: 60

  2. enter sleep mode

  3. wifi disconnected

  4. pm close 7
  5. fpm open,type:1 0
  6. fpm 758

  7. ets Jan  8 2013,rst cause:2, boot mode:(3,6)

  8. load 0x40100000, len 2408, room 16
  9. tail 8
  10. chksum 0xe5
  11. load 0x3ffe8000, len 776, room 0
  12. tail 8
  13. chksum 0x84
  14. load 0x3ffe8310, len 632, room 0
  15. tail 8
  16. chksum 0xd8
  17. csum 0xd8
复制代码

  1.         void ICACHE_FLASH_ATTR user_init(){
  2.         PIN_FUNC_SELECT(RED_LIGHT_IO_MUX, RED_LIGHT_IO_FUNC);

  3.         drv_Switch_Init();
  4.         sleep_init();

  5.         os_printf("Firmware Version: 20181101\n");

  6.         wifi_set_opmode(STATION_MODE);

  7.         wifi_station_get_config_default(&stationConf);

  8.         if (os_strlen(stationConf.ssid) != 0) {
  9.                 os_printf("user_scan\n");
  10.                 //net_status        = 1;
  11.                 os_timer_disarm(&check_ip_timer);
  12.                 os_timer_setfn(&check_ip_timer, (os_timer_func_t *) user_check_ip, NULL);
  13.                 os_timer_arm(&check_ip_timer, 100, 0);

  14.         } else {
  15.                  os_printf("smartcfg\n");

  16.                  smartconfig_start(smartconfig_done);
  17.                  net_status  = 0;
  18.                  WIFI_DISCONNTED_FLAG;

  19.         }

  20.         os_timer_disarm(&light_status_timer);
  21.         os_timer_setfn(&light_status_timer, (os_timer_func_t *)led_status_timer_func , NULL);
  22.         os_timer_arm(&light_status_timer,MAIN_TIMER_PERIOD,1);

  23.         os_timer_disarm(&sleep_timer);
  24.         os_timer_setfn(&sleep_timer, (os_timer_func_t *)sleep_timer_func , NULL);
  25.         os_timer_arm(&sleep_timer,SLEEP_TIMER_PERIOD,1);
  26.         }
复制代码


  1. void sleep_init(void){
  2.         wifi_fpm_set_sleep_type(LIGHT_SLEEP_T);     //set force sleep type, clsoe rf&cpu
  3.         wifi_fpm_set_wakeup_cb(fpm_wakup_cb_func1); //Set fpm wakeup callback function

  4. }
复制代码

  1. void sleep_start(void )
  2. {
  3.         os_printf("enter sleep mode\n\n");

  4.         if(wifi_station_get_connect_status() == STATION_GOT_IP){
  5.                 while(!wifi_station_disconnect()){
  6.                         os_delay_us(10);
  7.                 }
  8.                 os_printf("wifi disconnected\n\n");
  9.         } else {
  10.                 smartconfig_stop();
  11.                 os_printf("wifi not connected\n\n");
  12.         }
  13.         os_delay_ms(200);
  14.         RED_LIGHT_OFF;
  15.         wifi_set_opmode(NULL_MODE);                              //set wifi mode to null mode.
  16.         wifi_fpm_open();                                            //enable force sleep fucntion

  17.         int rst =  wifi_fpm_do_sleep(FPM_SLEEP_MAX_TIME);      // do sleep
  18.         os_printf("sleep rst : %d",rst);


  19. }
复制代码


  1. void ICACHE_FLASH_ATTR
  2. sleep_timer_func(void )
  3. {
  4.         static uint8_t cnt = 0;
  5.         if(sleep_time_cnt < SLEEP_TIME_CNT){
  6.                 sleep_time_cnt++;
  7.                 os_printf("sleep_time_cnt: %d\n\n",sleep_time_cnt);
  8.         }else {//2 min
  9.                 sleep_time_cnt = 0;
  10.                 os_timer_disarm(&check_ip_timer);
  11.                 os_timer_disarm(&light_status_timer);
  12.                 os_timer_disarm(&KeyScan_timer);
  13.                 os_timer_disarm(&sleep_timer);
  14.                 sleep_start();
  15.         }

  16. }
复制代码


——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
我尝试打印复位原因,得到以下信息,貌似是看门口定时器复位了,我把所有定时器都关闭了,应该如何喂狗?

  1.         struct rst_info *rst_info = system_get_rst_info();
  2.         os_printf("reset reason: %x\n", rst_info->reason);
  3.         if(rst_info->reason == REASON_WDT_RST || rst_info->reason == REASON_EXCEPTION_RST || rst_info->reason == REASON_SOFT_WDT_RST)
  4.         {
  5.                         if (rst_info->reason == REASON_EXCEPTION_RST)
  6.                         {
  7.                                 os_printf("Fatal exception (%d):\n", rst_info->exccause);
  8.                         }
  9.                         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);
  10.         }
复制代码

  1. reset reason: 3
  2. epc1=0x40232284, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000000, depc=0x00000000
复制代码

  1. 40232284:        ffff06                j        40232284 <fpm_do_sleep+0x20>
复制代码


回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|安信可论坛    

GMT+8, 2018-11-20 06:23 , Processed in 0.016343 second(s), 12 queries , Redis On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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