17. VM区域系统配置部分
Overview
提供VM区域syscfg配置项操作部分相关API说明,syscfg配置项一般使用于记忆存储用户配置信息,具体软件代码见 bsp/include/vm.h
。
配置项ID分配说明
配置项ID号根据存储区域进行分配;
[0]: 配置项ID号0为配置项工具保留ID号;
[ 1 ~ 59]: 共59项, 预留给用户自定义, 只存于VM区域;
[ 60 ~ 99]: 共40项, sdk相关配置项, 只存于VM区域;
[100 ~ 255]: 共156项, sdk相关配置项, 可以存于VM区域, sys_cfg.bin(作为默认值) 和 BTIF区域;
[512 ~ 700]: 共188项, sdk相关配置项, 只存于sys_cfg.bin;
存储区域说明
存储区域有3个: 1)VM区域; 2)sys_cfg.bin; 3)BTIF区域。
VM区域运行期写入,重新烧录清除,支持多次读写操作。BIN区域烧录期写入,只支持读操作。BTIF运行期写入,重新烧录清除,支持多次读和一次写操作。
读写的优先级为BIN > VM > BTIF。
ID号分配方案
与APP CASE 相关的ID (1 ~ 59),预留给用户自定义;
lib库保留ID(wifi,蓝牙, Third party platform) (范围: 60 ~ 237);
用于PC端的sys_cfg.bin(512 ~ 700);
VM_INDEX_DES_MAX通过app_cfg.mk进行配置,默认256;
读写接口使用注意事项
不能在中断里调用写(write)接口;
读配置项返回的数据已成功通过了crc校验,不用再进行二次校验。
调用本读写接口时应该习惯性判断返回值来检查read/write动作是否执行正确;
关于vm模块初始化,因为FLASH有一部分不支持page单元读写。因此在操作page单元的vm模块,在初始化设置了使用page模式,会尽量使用page单元进行擦写。但是因为用户需求的vm_len大于使用page单元操作的vm_bit_map最大数据长度限制,则会在vm模块初始化强制切换到sector模式。
17.1. 应用实例
示例演示:
读取 VM_USER_SART 配置项,如果没有内容则报错, 否则打印配置项内容
写入VM_USER_SART 配置项内容
复位
example:
打开
bsp/AC638N/AC638N.cbp``工程,添加 ``apps/example/vm/vm_test.c
在
AC638N.cbp
工程的main.c的主函数user_main中调用测试文件vm_tesr.c
中的c_main
函数即可。
17.2. 常见问题
除开系统中已用的配置项索引, 在VM区域用户可用的配置项索引范围是什么?
答:可以通过查看
bsp/include/vm_id.h
得知用户使用的范围是从 VM_USER_SART 到 CFG_USER_DEFINE_ENDVM_USER_MAX,即21-127。配置项最大配置长度是多少? 答:65535字节。
17.3. API参考
Functions
-
VM_ERR vm_eraser(void)
vm数据全部清除
- Returns
VM_ERR:错误值
-
s32 vm_read(vm_hdl hdl, u8 *data_buf, u16 len)
vm读函数,读取对应id的存储值
- Parameters
hdl – id号
data_buf – 读取数据存放buf
len – 读取长度,要和写进去的长度一致
- Returns
读取的长度值:与len一致表示读取成功,其他错误返回值请看VM_ERR
-
s32 vm_write(vm_hdl hdl, u8 *data_buf, u16 len)
vm写函数,读取对应id的存储值
- Parameters
hdl – id号
data_buf – 要写入数据的存放buf
len – 写长度
- Returns
写入的长度值:与len一致表示写入成功,其他错误返回值请看VM_ERR