Page 1 of 1

【已同步】tuyaos-3.3.3版本,断电记忆如何实现,数据存在那个地址

Posted: 2023年 Feb 25日 11:02
by cheng_JS

新版本的3.3.3,不知道怎么保存数据,有没有关于断电记忆的实例


Re: tuyaos-3.3.3版本,断电记忆如何实现,数据存在那个地址

Posted: 2023年 Feb 25日 11:20
by yingtao_33

TuyaOS框架内有存储相关示例,

存储.png

示例的使用可以参考此贴:viewtopic.php?t=357


Re: tuyaos-3.3.3版本,断电记忆如何实现,数据存在那个地址

Posted: 2023年 Feb 25日 15:51
by cheng_JS

for(;;)
{
tal_system_sleep(3000);
if(save_flag)
{
tal_system_sleep(3000);
if(ctl_enmu_fact ==1 && ctl_enmu ==1)
{
save_flag = 0;
write_buf[0] = 12;
write_buf[1] = time_cnt_ms/0XFF;
write_buf[2] = time_cnt_ms%0XFF;
write_buf[3] = percent;
write_buf[4] = control_back;
wd_common_write(DATA_NAME, write_buf, CNTSOF(write_buf));
TAL_PR_DEBUG("i saved!!!!!\r\n");
}
}
if(i++%5==0)
{
wd_common_read(DATA_NAME, &read_buf, 5);
TAL_PR_DEBUG("i readed:%d percent:%d\r\n",read_buf[0],read_buf[3]);
}
}

我在log中可以看到i saved!!!!!,证明已经写了,但读出来却是232,而且每次读出来都不一样
[02-25 15:49:56 TUYA D][tuya_app_main.c:542] i saved!!!!!

[02-25 15:49:59 TUYA D][lr:0xaa305] feed watchdog
[02-25 15:50:06 TUYA D][lr:0xb0dc7] host[m2.tuyacn.com] mqtt_ping -->>
[02-25 15:50:06 TUYA D][lr:0xb0e2f] host[m2.tuyacn.com] mqtt_ping <<--
[02-25 15:50:06 TUYA D][lr:0xb1e0f] host[m2.tuyacn.com] ping respond. update fail_cnt:0
[02-25 15:50:06 TUYA D][lr:0xb15dd] mqtt[m2.tuyacn.com] status:7
[02-25 15:50:08 TUYA D][tuya_app_main.c:549] i readed:232 percent:0

[02-25 15:50:14 TUYA D][lr:0x79751] set time by rtc
[02-25 15:50:19 TUYA D][lr:0xaa305] feed watchdog
[02-25 15:50:23 TUYA D][tuya_app_main.c:549] i readed:164 percent:0


Re: tuyaos-3.3.3版本,断电记忆如何实现,数据存在那个地址

Posted: 2023年 Feb 27日 08:57
by niezheyuan

wd_common_read(DATA_NAME, &read_buf, 5);
这个地方将&read_buf 改成 read_buf试试(如果定义的是数组可以忽略)。另外调试数据读写函数的时候,最好使写,读的调用要对应起来,例如把变量“i”打印出来,看看这次读出的数据,是否对应的上次写入的


Re: tuyaos-3.3.3版本,断电记忆如何实现,数据存在那个地址

Posted: 2023年 Feb 27日 09:21
by 愚者千虑必有一得

tuyaos_demo_examples有一个详细的demo,演示kv的完整流程的。另外你也可以尝试使用uf来实现断电记忆,uf的操作类似文件读写,更容易理解。

企业微信截图_16774607937672.png

Re: tuyaos-3.3.3版本,断电记忆如何实现,数据存在那个地址

Posted: 2023年 Feb 27日 11:46
by 愚者千虑必有一得

看看这个代码,你的read写法有点问题,len不要传常量,会作为地址来操作的。

Code: Select all

    BYTE_T  *read_buf = NULL;
    UINT_T read_len;
    
/* read lean */ read_len = 5; /* read "my_key" value from kv database */ TUYA_CALL_ERR_GOTO(wd_common_read(KEY_NAME, &read_buf, &read_len), __EXIT); TAL_PR_NOTICE("read len %d, read data:", read_len); for ( i = 0; i < read_len; i++) { TAL_PR_DEBUG_RAW("0x%02x ", read_buf[i]); } TAL_PR_DEBUG_RAW("\r\n\r\n"); __EXIT: /*free data*/ if (NULL != read_buf) { TUYA_CALL_ERR_LOG(wd_common_free_data(read_buf)); read_buf = NULL; }

Re: 【已同步】tuyaos-3.3.3版本,断电记忆如何实现,数据存在那个地址

Posted: 2023年 Feb 28日 11:41
by cheng_JS

非常感谢,解决了