新版本的3.3.3,不知道怎么保存数据,有没有关于断电记忆的实例
【已同步】tuyaos-3.3.3版本,断电记忆如何实现,数据存在那个地址
-
- Posts: 245
Re: tuyaos-3.3.3版本,断电记忆如何实现,数据存在那个地址
TuyaOS框架内有存储相关示例,
示例的使用可以参考此贴:viewtopic.php?t=357
Re: tuyaos-3.3.3版本,断电记忆如何实现,数据存在那个地址
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
-
- Posts: 64
Re: tuyaos-3.3.3版本,断电记忆如何实现,数据存在那个地址
wd_common_read(DATA_NAME, &read_buf, 5);
这个地方将&read_buf 改成 read_buf试试(如果定义的是数组可以忽略)。另外调试数据读写函数的时候,最好使写,读的调用要对应起来,例如把变量“i”打印出来,看看这次读出的数据,是否对应的上次写入的
Re: tuyaos-3.3.3版本,断电记忆如何实现,数据存在那个地址
tuyaos_demo_examples有一个详细的demo,演示kv的完整流程的。另外你也可以尝试使用uf来实现断电记忆,uf的操作类似文件读写,更容易理解。
Re: tuyaos-3.3.3版本,断电记忆如何实现,数据存在那个地址
看看这个代码,你的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;
}