Closed Moliam97 closed 2 years ago
EF_ERASE_MIN_SIZE 是4K ENV_AREA_SIZE 是16K,上面显示有误
感谢armink的easy flash,这个问题我已经解决了。是因为变量key定义时并不是4字节对齐。所以在create_env_blob函数中,使用uint32_t *强转的key出现了问题,数据是对的,但是写入flash时,被写入了随机数据。我加了解决办法,
static uint32_t user_key[16] = {0}; memset(&user_key, 0, sizeof(user_key)); memcpy(user_key, key, strlen(key));
定义一个uint32_t的函数在附近,然后每次写入时,进行赋值,在alige_write的时候,key改为user_key解决
解决办法有点粗糙,但是对于目前我使用的场景,是不会有64字节的名字的
armink 你好,我现在在另一款芯片(Wifi Soc)上使用easy flash V4.0。在最开始得时候使用easyflash_init返回为NO_ERR,再调用get时,发现返回为0,在使用set也不行。目前不知道是什么问题,看flash内容似乎是没有存进去,但是可以正常写扇区前的标志位。
目前进度
define EF_USING_ENV
ifdef EF_USING_ENV
define EF_ENV_VER_NUM 0
endif
define EF_ERASE_MIN_SIZE (4*1024)
define EF_WRITE_GRAN (32)
define EF_START_ADDR 0
define ENV_AREA_SIZE (16*1024)
define LOG_AREA_SIZE
define PRINT_DEBUG
初始化值
wifi_reboot_info_t wifi_reboot_info = { .reboot_params = 3, .reboot_total_cnt = 5, }; static const ef_env default_env_set[] = { "reboot",&wifi_reboot_info,sizeof(wifi_reboot_info_t) }; 此处看文档说,是可以为空没有默认值的,但是后面为了测试,这里还是加上了。
具体代码
代码使用循环调用,记录设备重启次数 ` EfErrCode ret = easyflash_init(); printf("flash init result %d\n", ret);
具体打印
循环打印如下数据 #########read env ########read env end,reboot cnt 0 @@@@@@@@ret 0!!!!!!!!!!!!!!!!!!!! $$$$$$$$$$read env end,reboot cnt 100000