收藏官网首页
楼主: 海底沙

关于SNTP获取网络时间的问题

13

主题

81

帖子

1241

积分

金牌会员

Rank: 6Rank: 6

积分
1241
跳转到指定楼层
楼主
发表于 2017-7-4 17:06:50 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
注册成为机智云开发者,手机加虚拟设备快速开发
请问机智云SDK中是否有获取网络时间的函数,我现在用的是 sntp_get_real_time ,此函数返回的是包含年、月、日、时、分、秒、星期的一串字符,有没有返回单个“时”或“分”的函数?是不是需要自己转换?

13

主题

81

帖子

1241

积分

金牌会员

Rank: 6Rank: 6

积分
1241
沙发
 楼主| 发表于 2017-7-5 07:12:41 | 显示全部楼层
多谢,我试一下,有不懂的再来向你们请教。

13

主题

81

帖子

1241

积分

金牌会员

Rank: 6Rank: 6

积分
1241
板凳
 楼主| 发表于 2017-7-8 15:31:22 | 显示全部楼层
把 _tm *ptime;  改为 _tm ptime; 应该就行了

13

主题

81

帖子

1241

积分

金牌会员

Rank: 6Rank: 6

积分
1241
地板
 楼主| 发表于 2017-7-12 08:40:42 | 显示全部楼层
hydyguo 发表于 2017-7-11 09:10
海底沙,你好,sntp已解决,不但解决您说的地方,还要解决“->"这个符号问题。谢谢!
再请您帮我分析一下fl ...

设0X7D,0XFD这两个地址应该没错,但读写数据到flash必须是4字节对齐,好象你的数据不是4字节的倍数,可能你写入就失败了,所以就读不到数据了。

13

主题

81

帖子

1241

积分

金牌会员

Rank: 6Rank: 6

积分
1241
5#
 楼主| 发表于 2017-7-12 09:45:01 | 显示全部楼层
免费使用STM32、APP自动代码生成工具
hydyguo 发表于 2017-7-12 09:21
这个4字节的倍数应该怎么处理,您能给我一个例子吗,谢谢你!

我也是个新手,没用过这,你试一下改成这样行不行:
system_param_save_with_protect(ESP_PARAM_START_SEC,(uint32 *)esp_flash, sizeof(esp_flash));

13

主题

81

帖子

1241

积分

金牌会员

Rank: 6Rank: 6

积分
1241
6#
 楼主| 发表于 2017-7-15 17:34:52 | 显示全部楼层
本帖最后由 海底沙 于 2017-7-15 17:36 编辑
hydyguo 发表于 2017-7-12 10:31
还是没有结果,看来机智云大神都躲庙里修仙去了,让我们两个新手在这里瞎折腾了。谢谢你! ...

不知你解决没有?今天有空试了一下。
如果 system_param_save_with_protect 放在有 ICACHE_FLASH_ATTR 的回调函数里,就出现重启现象,



如果没有 ICACHE_FLASH_ATTR 的回调函数里,就可行。不知为什么,有大神解答吗?

13

主题

81

帖子

1241

积分

金牌会员

Rank: 6Rank: 6

积分
1241
7#
 楼主| 发表于 2017-7-17 16:04:43 | 显示全部楼层
本帖最后由 海底沙 于 2017-7-17 16:17 编辑
hydyguo 发表于 2017-7-17 12:25
你好!这两天在画PCB板,没有看消息,我的问题还没解决,前几天问了机智云工程师,第一回复怀疑程序烧写地 ...

我的测试只是随便找的2个地方放读写函数,实际不是这样做的。

我也是放在这个函数里 int8_t ICACHE_FLASH_ATTR gizwitsEventProcess 数据一改变写flash就出现重启


你测试一下:把  int8_t ICACHE_FLASH_ATTR gizwitsEventProcess(、、、)改为 int8_t   gizwitsEventProcess(、、、)试一下。

13

主题

81

帖子

1241

积分

金牌会员

Rank: 6Rank: 6

积分
1241
8#
 楼主| 发表于 2017-7-17 20:04:32 | 显示全部楼层
hydyguo 发表于 2017-7-17 16:50
不行,不加这个“ICACHE_FLASH_ATTR”在我这系统里编译通不过,我用的是安信可ESP8266 IDE, ...

因为我也要保存当前状态,所以今晚又测试了一下,既然可以了,真是莫明其妙,不知问题出在哪?请高手解答一下。
下面代码给你参考一下:

gizwits_product.c
/** 用户区当前设备状态结构体*/
extern dataPoint_t currentDataPoint;
   
[url=]/**@name[/url] Gizwits 用户API接口
* @{
*/
/**
* @brief 事件处理接口
* 说明:
* 1.用户可以对WiFi模组状态的变化进行自定义的处理
* 2.用户可以在该函数内添加数据点事件处理逻辑,如调用相关硬件外设的操作接口
* @param[in] info : 事件队列
* @param[in] data : 协议数据
* @param[in] len : 协议数据长度
* @return NULL
* @ref gizwits_protocol.h
*/
int8_t ICACHE_FLASH_ATTR gizwitsEventProcess(eventInfo_t *info, uint8_t *data, uint32_t len)
{
  uint8_t i = 0;
  dataPoint_t *dataPointPtr = (dataPoint_t *)data;
  moduleStatusInfo_t *wifiData = (moduleStatusInfo_t *)data;
  if((NULL == info) || (NULL == data))
  {
    return -1;
  }
  for(i=0; i<info->num; i++)
  {
    switch(info->event)
    {
      case EVENT_SOCKET_ONOFF_A:
        currentDataPoint.valuesocket_OnOff_a = dataPointPtr->valuesocket_OnOff_a;
        os_printf("Evt: EVENT_SOCKET_ONOFF_A %d \n", currentDataPoint.valuesocket_OnOff_a);
        if(0x01 == currentDataPoint.valuesocket_OnOff_a)
        {
        //user handle
     
        }
        break;
      case EVENT_TIMING_START:
        currentDataPoint.valuetiming_start = dataPointPtr->valuetiming_start;
        os_printf("Evt: EVENT_TIMING_START %d \n", currentDataPoint.valuetiming_start);
        if(0x01 == currentDataPoint.valuetiming_start)
        {
           //user handle

         }
        break;
      case EVENT_TIMED_TASK:
        currentDataPoint.valuetimed_task = dataPointPtr->valuetimed_task;
        os_printf("Evt: EVENT_TIMED_TASK %d\n", currentDataPoint.valuetimed_task);
        switch(currentDataPoint.valuetimed_task)
        {
          case TIMED_TASK_VALUE0:
            //user handle

        break;
      case EVENT_TIMING_HOUR:
        currentDataPoint.valuetiming_hour = dataPointPtr->valuetiming_hour;
        os_printf("Evt:EVENT_TIMING_HOUR %d\n",currentDataPoint.valuetiming_hour);
        //user handle
     
   }
        break;
      case EVENT_TIMING_MINUTE:
        currentDataPoint.valuetiming_minute = dataPointPtr->valuetiming_minute;
        os_printf("Evt:EVENT_TIMING_MINUTE %d\n",currentDataPoint.valuetiming_minute);
        //user handle
     
   }
        break;

      case WIFI_SOFTAP:
        break;
      case WIFI_AIRLINK:
        break;
      case WIFI_STATION:
        break;
      case WIFI_CON_ROUTER:
        break;
      case WIFI_DISCON_ROUTER:
        break;
      case WIFI_CON_M2M:
        break;
      case WIFI_DISCON_M2M:
        break;
      case WIFI_RSSI:
        os_printf("RSSI %d\n", wifiData->rssi);
        break;
      case TRANSPARENT_DATA:
        os_printf("TRANSPARENT_DATA \n");
        //user handle , Fetch data from [data] , size is [len]
        break;
      default:
        break;
    }
  }
  system_os_post(USER_TASK_PRIO_0, SIG_UPGRADE_DATA, 0);
  
  system_param_save_with_protect(0x7D, (uint32 *)&currentDataPoint, sizeof(currentDataPoint));
  
os_printf("### save timing ### \n");  
  
  return 0;


读函数:(临时位置)
user_main.c

/** 用户区当前设备状态结构体*/
dataPoint_t currentDataPoint;
dataPoint_t currentDataPoint_my;   //新定义一个结构体保存从flash读出的数据

void ICACHE_FLASH_ATTR userTimerFunc(void)
{

system_param_load(0x7D, 0, (uint32 *)&currentDataPoint_my,sizeof(currentDataPoint_my));
os_printf("### timing : %d \n",currentDataPoint_my.valuetiming_minute);
        
    system_os_post(USER_TASK_PRIO_0, SIG_UPGRADE_DATA, 0);
}

13

主题

81

帖子

1241

积分

金牌会员

Rank: 6Rank: 6

积分
1241
9#
 楼主| 发表于 2017-7-18 11:27:28 | 显示全部楼层
本帖最后由 海底沙 于 2017-7-18 11:36 编辑
hydyguo 发表于 2017-7-18 10:48
如果你那边能读写,采用你的方法和我前面试的一样,不知怎么回事,只要是自定义结构体,一执行读数据程序就 ...

不知你的代码是否很大,我昨晚把add改到第三个1k的最后,直接把地址写成 0x27D ,测试也通过。

不要“在0X7D,0XFDl加上参数,就是0X7D*4*4096”,直接写地址  0x27D

另外,你在  &currentDataPoint  前面加上 (uint32 *) 没有?

13

主题

81

帖子

1241

积分

金牌会员

Rank: 6Rank: 6

积分
1241
10#
 楼主| 发表于 2017-7-20 22:03:29 | 显示全部楼层
教您5分钟接入机智云,实现傻瓜式开发
本帖最后由 海底沙 于 2017-7-20 22:05 编辑
hydyguo 发表于 2017-7-19 14:58
你好!您昨天中午发的信息,今天上午才看到,昨天一直没有信息提示,不知为什么。
      同样的方法在你那 ...

不好意思,在外面出差,手上没板子。
你发给我,我星期六回去帮你测试一下,我的QQ1758054922
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

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