Comments (4)
没有太看明白你的意思,可以举一下具体的例子吗?两次升级前后 默认 kv 的差异
from flashdb.
比如:
struct system_info{
uint32_t boot_count;
uint32_t error_count;
};
struct base_info{
char name[10];
uint32_t version;
};
static struct system_info sys_init_info =
{
.boot_count = 0u,
.error_count = 0u,
};
tatic struct base_info base_init_info =
{
.name = "abc",
.version = 1,
}
#define KVDB_VERSION ( 0u )
static struct fdb_default_kv_node system_kv_table[] = {
{"sys_info", &sys_init_info, sizeof(struct system_info)},
{"base_info", &base_init_info, sizeof(struct base_info)}
};
以上是原始结构体,编译后下载,随后第一种情况是,修改struct system_info结构体,改为如下:
struct system_info{
uint32_t boot_count;
uint32_t error_count;
uint8_t test_count;
};
static struct system_info sys_init_info =
{
.boot_count = 0u,
.error_count = 0u,
.test_count = 1u,
};
#define KVDB_VERSION ( 1u )
修改以上内容,重新下载,我发现读取base_info的name出错了,是不是不能这样做?
第二种情况是,在原来结构体的基础上增加一个结构体:
struct test{
uint8_t test_count;
};
static struct test test =
{
.test_count = 1u,
};
#define KVDB_VERSION ( 1u )
static struct fdb_default_kv_node system_kv_table[] = {
{"sys_info", &sys_init_info, sizeof(struct system_info)},
{"base_info", &base_init_info, sizeof(struct base_info)},
{"test", &test, sizeof(struct test)}
};
是不是需要这样做才能增量升级成功,保证数据不错位?
from flashdb.
自动升级没法做到 value 的内容格式发生变化进行升级,主要是 kv 的默认集合发生变化时,自动增加新的 kv
你这种情况,建议:
- 考虑增加新的 kv
- 设计时留有一定的余量
- 开机检查 system_info 实际存储与固件中 value 大小是否相同,不相同进行手动更新
你觉得这样可以吗
from flashdb.
可以,朱总,有实现方法就可以。
- 增加新的kv就是我说的第二种方法吧
- 设计留余量,这个目前我的个人能力不足
- 开机检查这个可以,实现比较容易,我先用这个方法
谢谢!
from flashdb.
Related Issues (20)
- 移植后norlfash的默认配置参数无法写入成功,请问下可能是什么原因? HOT 1
- Question: any reason to check that new entry timestamp is newer than previous? HOT 4
- 关于默认参数表写入超过48字节的字符型kv引发的问题 HOT 3
- 现有迭代器函数很难覆盖更多应用,一些新迭代器函数的实现探讨 HOT 1
- flashdb日志写满判断 HOT 2
- fal_flash_stm32f4.c中stm32_get_sector函数中的Address是否应替换为addr
- 关于TSDB存满之后的问题,望作者大大解答呀
- FlashDB取消了IAP功能吗 HOT 1
- 2.1版本初始化KVDB时重复上锁 HOT 5
- FlashDB 中tsdb如何实现log存储,需要用easylogger配合吗?
- [FlashDB][tsl][log] Error: this TSL (0x004002E8) size (724249387) is out of bound.remain = 3972857
- 出现crc32 failed, 测试程序boot_count总是读取失败, 但是测试程序temp的read/write是正常的 HOT 2
- KVDB在写满后再次写入失败,需要写入第二次 HOT 1
- 请教 KVDB 掉电异常后的恢复方法
- 测试tsdb连续保存累计数达一定数量后出现前面部分数据丢失的现象 HOT 2
- 用文件作为存储后端,有锁首次初始化时,_fdb_kv_load 中调用 fdb_kv_set_default 死锁 HOT 2
- 老化擦写Flash的KV后,读取一个不存在的KV或者写一个不存在的KV,Flash耗时长
- check the current timestamp, MUST more than the last save timestamp HOT 4
- 是否支持STM32G0B1RCT6 HOT 6
- 分区越大,插入速度越慢 HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from flashdb.