完善资料让更多小伙伴认识你,还能领取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。你可以试一下 要读取之前存储数据,我没写过,你可以自己根据版本管理写一个函数。读取出来 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式-ELFBOARD 常用的USB接口及其不同版本介绍第1期
847 浏览 0 评论
【Vision Board创客营连载体验】RA8D1-Vision Board上OSPI-Flash实践
1330 浏览 0 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 应用层更改引脚复用的方法
3603 浏览 0 评论
1723 浏览 0 评论
【英飞凌PSoC 6 RTT开发板试用】串口测试标准输入输出重定向
1244 浏览 0 评论
60425 浏览 21 评论
289359 浏览 79 评论
13716 浏览 52 评论
16513 浏览 55 评论
54736 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-6-30 23:01 , Processed in 0.594369 second(s), Total 68, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191