【已解决】【tuyaos】uf_db方式存储数据失败
1)开发包全称:tuyaos-iot_3.8.1_bk7231n_wifi-ble-com_1.2.8.tar.gz
2)为了上电尽快读取掉电保存采取了通过事件触发启动程序如图。
测试发现写进去的数据读出来永远多一位,并且数据空白不知道是怎么回事。(example例程里面写读 五个字节的可以)
1)开发包全称:tuyaos-iot_3.8.1_bk7231n_wifi-ble-com_1.2.8.tar.gz
2)为了上电尽快读取掉电保存采取了通过事件触发启动程序如图。
测试发现写进去的数据读出来永远多一位,并且数据空白不知道是怎么回事。(example例程里面写读 五个字节的可以)
wxq1123 2024年 Jan 15日 14:551)开发包全称:tuyaos-iot_3.8.1_bk7231n_wifi-ble-com_1.2.8.tar.gz
2)为了上电尽快读取掉电保存采取了通过事件触发启动程序如图。
测试发现写进去的数据读出来永远多一位,并且数据空白不知道是怎么回事。(example例程里面写读 五个字节的可以)微信截图_20240115144616.jpg
请参考 example_os_uf_file 示例试试。uf_db_user_param_write 写入的数据,当写入 0 时认为数据写入结束
最后一个字节是“0”和“'\0'”都不行啊
uf_db_user_param_write 只能写入可见字符。example_os_uf_file 示例可以二进制内容写入的
这个帖子也是关于 uf 示例的,你可以参考下:
viewtopic.php?t=2689
yangjie 2024年 Jan 15日 15:38uf_db_user_param_write 只能写入可见字符。example_os_uf_file 示例可以二进制内容写入的
这个帖子也是关于 uf 示例的,你可以参考下:
viewtopic.php?t=2689
不太明白,我没有需要操作的txt文件呀。我就想搞个便捷的掉电保存而已
uf_file:支持文本文件和二进制文件。也是掉电不丢失的。
uf_file: 是通过文件来保存数据的,你可以先创建一个文件,文件名就相当于 key-value 中的 key ,是可以随便定义的。value 就是相当于文件内的内容,可以用来存放你的上下电次数的。
yangjie 2024年 Jan 15日 16:01uf_file:支持文本文件和二进制文件。也是掉电不丢失的。
uf_file: 是通过文件来保存数据的,你可以先创建一个文件,文件名就相当于 key-value 中的 key ,是可以随便定义的。value 就是相当于文件内的内容,可以用来存放你的上下电次数的。
有没有直接保存16进制数据的方法?uf原来得把数据转成字符串才能保存,遇到16进制的0直接当结束符给处理掉了
你看下这个内容:https://www.cnblogs.com/kangjianwei101/p/5220021.html,覆盖二进制写用 wb+,追加二进制写用 ab+ (tuyaos 文件系统不支持 "wb+", "ab+" 模式,仅支持 "r","r+","a","a+","w","w+" 几种模式)
示例代码:
Code: Select all
***********************************************************
***********************function define**********************
***********************************************************/
/**
* @brief base db task
*
* @param[in] param:Task parameters
* @return none
*/
VOID example_uf_file(INT_T argc, CHAR_T *argv[])
{
OPERATE_RET op_ret = OPRT_OK;
UCHAR_T * fd = NULL;
UCHAR_T write_buff[5] = {0x00, 0x01, 0x02, 0x03, 0x04};
UCHAR_T *read_buff = NULL;
INT_T write_num = 0;
INT_T read_num = 0;
BOOL_T temp = TRUE;
TAL_PR_NOTICE("------ uf file example start ------");
/*open file, read and write mode*/
fd = ufopen("test.txt", "w+"); // 覆盖写,追加写用 "ab+"
if(NULL == fd) {
TAL_PR_ERR("file open fail");
} else {
TAL_PR_DEBUG("fd : %d", *fd);
}
/*change offset*/
ufseek(fd, 0, UF_SEEK_END);
/*write*/
write_num += ufwrite(fd, write_buff, 5);
TAL_PR_DEBUG("write number : %d", write_num);
/*check if the current offset reach the end of the file*/
temp = ufeof(fd);
if(temp) {
TAL_PR_DEBUG("offset is at the end");
} else {
TAL_PR_DEBUG("offset is not at the end");
}
/*change offset*/
ufseek(fd, 0, UF_SEEK_SET);
/*get current offset of the unique file*/
op_ret = uftell(fd);
TAL_PR_DEBUG("current offset : %d", op_ret);
/*get the size of the unique file*/
op_ret = ufgetsize("test.txt");
TAL_PR_DEBUG("file size: %d", op_ret);
if (op_ret > 0) {
write_num = op_ret;
}
/*read*/
read_buff = (UCHAR_T *)tal_malloc(sizeof(CHAR_T)*write_num + 1);
if(NULL == read_buff) {
TAL_PR_ERR("read buff malloc fail!");
}
read_num = ufread(fd, read_buff, write_num);
for (int i =0; i<read_num; i++) {
TAL_PR_DEBUG("read_buff[%d} : %x", i, read_buff[i]);
}
/*close*/
op_ret = ufclose(fd);
if(OPRT_OK != op_ret) {
TAL_PR_ERR("err<%d>, close fail!", op_ret);
}
tal_free(read_buff);
return;
}
yangjie 2024年 Jan 15日 17:33你看下这个内容:https://www.cnblogs.com/kangjianwei101/p/5220021.html,覆盖二进制写用 wb+,追加二进制写用 ab+
示例代码:
Code: Select all
*********************************************************** ***********************function define********************** ***********************************************************/ /** * @brief base db task * * @param[in] param:Task parameters * @return none */ VOID example_uf_file(INT_T argc, CHAR_T *argv[]) { OPERATE_RET op_ret = OPRT_OK; UCHAR_T * fd = NULL; UCHAR_T write_buff[5] = {0x00, 0x01, 0x02, 0x03, 0x04}; UCHAR_T *read_buff = NULL; INT_T write_num = 0; INT_T read_num = 0; BOOL_T temp = TRUE; TAL_PR_NOTICE("------ uf file example start ------"); /*open file, read and write mode*/ fd = ufopen("test.txt", "wb+"); // 覆盖写,追加写用 "ab+" if(NULL == fd) { TAL_PR_ERR("file open fail"); } else { TAL_PR_DEBUG("fd : %d", *fd); } /*change offset*/ ufseek(fd, 0, UF_SEEK_END); /*write*/ write_num += ufwrite(fd, write_buff, 5); TAL_PR_DEBUG("write number : %d", write_num); /*check if the current offset reach the end of the file*/ temp = ufeof(fd); if(temp) { TAL_PR_DEBUG("offset is at the end"); } else { TAL_PR_DEBUG("offset is not at the end"); } /*change offset*/ ufseek(fd, 0, UF_SEEK_SET); /*get current offset of the unique file*/ op_ret = uftell(fd); TAL_PR_DEBUG("current offset : %d", op_ret); /*get the size of the unique file*/ op_ret = ufgetsize("test.txt"); TAL_PR_DEBUG("file size: %d", op_ret); if (op_ret > 0) { write_num = op_ret; } /*read*/ read_buff = (UCHAR_T *)tal_malloc(sizeof(CHAR_T)*write_num + 1); if(NULL == read_buff) { TAL_PR_ERR("read buff malloc fail!"); } read_num = ufread(fd, read_buff, write_num); for (int i =0; i<read_num; i++) { TAL_PR_DEBUG("read_buff[%d} : %x", i, read_buff[i]); } /*close*/ op_ret = ufclose(fd); if(OPRT_OK != op_ret) { TAL_PR_ERR("err<%d>, close fail!", op_ret); } tal_free(read_buff); return; }
wb+ ab+ 模式打开均失败。