2.23. 配置项存储使用说明

Overview

展示配置项存储接口使用示例,一般使用于记忆存储用户配置信息

Important

V1.0.3以及之后的版本增加VM优化配置,最大可以支持64K配置,配置项如下:

VM_MAX_PAGE_ALIGN_SIZE_CONFIG: page对齐vm管理空间最大值配置。 VM_MAX_SECTOR_ALIGN_SIZE_CONFIG: sector对齐vm管理空间最大值配置。 VM_DEFRAG_SIZE: VM 碎片整理百分比。

注意事项一: 由于新增配置对VM空间进行了优化,对之前的版本会造成不兼容,需要兼容之前的版本(如:旧版本升级到新版本)时需要进行如下设置:

步骤一: 确保哪些版本需要兼容:

存在VM优化配置项(什么是VM优化配置项? 答:VM_MAX_PAGE_ALIGN_SIZE_CONFIG、VM_MAX_SECTOR_ALIGN_SIZE_CONFIG和VM_DEFRAG_SIZE配置项)的SDK,需要兼容没有VM优化配置项的sdk时,需要进行兼容配置。

步骤二:在codeblock或Makefile中,修改如下:

VM_MAX_PAGE_ALIGN_SIZE_CONFIG=8*1024
VM_MAX_SECTOR_ALIGN_SIZE_CONFIG=16*1024

步骤三:在cpu/wl82/tools/isd_config_rule.c中对VM_LEN进行配置。

VM_ADR=0;
VM_LEN=(len); //其中:len表示为之前版本设置的长度
VM_OPT=0;

注意事项二: 不需要兼容之前版本的,需要进行如下设置来进行VM空间优化:

步骤一:在codeblock或Makefile中,修改如下:

VM_MAX_PAGE_ALIGN_SIZE_CONFIG=64*1024
VM_MAX_SECTOR_ALIGN_SIZE_CONFIG=64*1024

步骤二:在cpu/wl82/tools/isd_config_rule.c中对VM_LEN进行配置。

VM_ADR=0; [设置VM]
VM_LEN=32K; //最大为64K
VM_OPT=0;

2.23.1. 示例

示例工程:具体示例代码详见 apps/common/example/peripheral/flash/flash_syscfg/main.c ,示例工程实现需在 apps/demo/demo_DevKitBoard/include/demo_config.h 中开启宏 USE_FLASH_SYSCFG_TEST_DEMO

2.23.2. 常见问题

(1) 除开系统中已用的配置项索引, 用户可用的配置项索引范围是什么

答:配置项索引一共为255个,有些配置索引为SDK保留配置项,用户不得占用。用户可通过 syscfg_id.h 文件查看用户可用配置项范围,从 CFG_USER_DEFINE_BEGINCFG_USER_DEFINE_END 共59个配置项。

(2) 配置项最大配置长度是多少?

答:4095字节

(3) 配置项区域大小如何配置?

  • 对于具有VM空间优化配置的SDK版本(需要查看是否有如下配置:VM_MAX_PAGE_ALIGN_SIZE_CONFIG、VM_MAX_SECTOR_ALIGN_SIZE_CONFIG和VM_DEFRAG_SIZE),最大支持配置为64k,通过修改 cpu/wl82/tools/isd_config_rule.c 进行配置,如下图所示:

VM_ADR=0; [设置VM]
VM_LEN=32K; //最大支持64K
VM_OPT=0;

  • 对于没有VM空间优化配置的SDK版本,默认最大配置为32k。

(4) 报[write overflow]错误?

答:一般情况下,对vm进行写入时,vm空间不够的情况下会首先进行碎片整理,但是当碎片整理后,vm的空间还是不够时,就会报[write overflow]的错误,有如下解决方法:

  • 可以在 cpu/wl82/tools/isd_config_rule.c 文件中增大VM_LEN的长度。需要注意的是,该方法只适用于具有VM空间优化配置的SDK版本(需要查看是否有如下配置:VM_MAX_PAGE_ALIGN_SIZE_CONFIG、VM_MAX_SECTOR_ALIGN_SIZE_CONFIG和VM_DEFRAG_SIZE)

  • 对于没有VM空间优化配置的SDK版本,可以适当减少VM_DEFRAG_SIZE的碎片整理百分比,如果配置太小,写vm时会出现频繁整理,这样会减少flash的使用寿命,同时频繁擦写flash也会造成频繁开关中断,影响都DAC和ADC,从而造成播歌录音出现卡顿,因此使用适当调整改参数。

(5) 为减少频繁写入VM导致的长时间关中断问题

答:提供VM写入缓存机制,可在 lib_system_config.c 中打开 const int config_vm_save_in_ram_enable = 1; 调用vm_in_ram_update()才主动刷新到flash。