完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1.假定数据A的大小为10个字节,使用FlashDB存储在外部flash中; 2.扩充A的数据结构大小为20个字节,不更改key值,那么在读取时是否会读取越界? 3.重新存储扩展后的数据A,假如分配的存储空间满,需要覆盖旧值,那么在覆盖未扩展前存储的数据时,是否会越界存储,从而导致存储的相邻键值数据被篡改? 请教各位大神,在实际情况中,遇到这种存储数据,但是后续数据的结构有更改的情况,有什么办法兼容读取未更改数据结构前存储的数据呢? |
|
相关推荐
1个回答
|
|
这种都是flash动态平衡的。
扩充A的数据结构大小为20个字节,不更改key值,那么在读取时是否会读取越界? 应该不会。不知道具体实现。根据STM32的flash驱动。 这种有读写保护的都不是固定往一个地址丢数据覆盖的。 首先会有个标识头表明是哪个变量的,比如”boot_count”这个字符串。下次读取会从地址末尾往前识别这个标识,识别成功再读取这个值。在之前的数据是不会被读取的。 static struct fdb_default_kv_node default_kv_table[] = { {"boot_count", &boot_count, sizeof(boot_count)}, /* int type KV */ {"save flag", &flash_save , sizeof(flash_save)}, 所以之前的10字节的数据可以理解为是被20字节的数据覆盖了。因为识别标识头会优先识别到20字节的数据,只要你标识头不改变。 3.重新存储扩展后的数据A,假如分配的存储空间满,需要覆盖旧值,那么在覆盖未扩展前存储的数据时,是否会越界存储,从而导致存储的相邻键值数据被篡改? 不会,因为当前扇区满了,会复制当前数据库到另一个空扇区去。再把当前扇区清空。 不存在你说的情况。 在实际情况中,遇到这种存储数据,但是后续数据的结构有更改的情况,有什么办法兼容读取未更改数据结构前存储的数据呢? kvdb有一个版本管理的选项 FDB_KV_AUTO_UPDATE。你可以试一下 要读取之前存储数据,我没写过,你可以自己根据版本管理写一个函数。读取出来 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
643 浏览 0 评论
2710 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2303 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统威廉希尔官方网站 与产业发展论坛”圆满结束
2778 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
30071 浏览 11 评论
72457 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-14 17:32 , Processed in 0.699449 second(s), Total 71, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号