支持云端升级,1024KB flash,"自定义数据" 存储方案如何规划?

Goland
Posts: 28
Joined: Fri Oct 23, 2015 10:45 am

支持云端升级,1024KB flash,"自定义数据" 存储方案如何规划?

Postby Goland » Wed Oct 28, 2015 5:13 pm

程序运行中有些一条一条的数据需要保存在flash中,每条数据假定123byte,数据总条数假定是100。循环使用.
写过程: 每次会读写一条数据,然后再 修改一个pointer(4byte),指向最后一条数据。
使用读写保护机制,即用system_param_load()读,用system_param_save_with_protect()写,
使用1024KB flash,支持云端升级,
我看了文档 2A-ESP8266__IOT_SDK_User_Manual__CN_v1.3.0.pdf,1024K分为两半,我的user1.bin小于240KB,
是不是数据存储可以从:4K+240K开始存储?即 0x3D开始?system_param_save_with_protect(0x3D, void *data, 123)
----------------
但这里先假定从4K+492KB开始存储,即 0x7C开始,
#define DATA_RECORD_POINTER_ADDR 0X7C // 数据pointer 位置,固定, 为了保存4byte数据,要使用3*4 KB的空间?
#define DATA_RECORD_START_ADDR 0X7F // 数据 起始位置
第1条数据 addr 0x7F, system_param_save_with_protect(0x7F, void *data, 123)
第2条数据 DATA_RECORD_START_ADDR+3=0x82, system_param_save_with_protect(0x82, void *data, 123)
第3条数据 DATA_RECORD_START_ADDR+6=0x85,system_param_save_with_protect(0x85, void *data, 123)
。。。
第100条数据的addr是 0x7F + 100*3=0x1AB, system_param_save_with_protect(0x1AB, void *data, 123)
为了保存 123byte的数据,使用了3*4 KB的空间,100条数据共使用100*12KB空间,
好像不对,请指导怎么规划这种存储,谢谢!

Goland
Posts: 28
Joined: Fri Oct 23, 2015 10:45 am

Re: 支持云端升级,1024KB flash,"自定义数据" 存储方案如何规划?

Postby Goland » Thu Oct 29, 2015 11:01 am

刚才优化了一下数据,现在单条数据长度是40byte,100条 共占用4000byte,不到 1个sector,
而“user param”区是16KB的,4个 sector,所以可以将数据 带“读写保护机制” 保存在这里(占了3个sector)。
是否可以像下面这样操作?
将数据pointer(4byte) 与 全部数据 合并存储 在一个 sector里,
每次改写数据时,先malloc(4KB), 将 1个 sector的数据全部读回,
做处理,将修改后的 数据 再次 全部写回,
但觉得这样读写,为了修改部分数据,而实际上读写了 所有数据,效率是不是有些问题?

Who is online

Users browsing this forum: No registered users and 27 guests